導航:首頁 > 操作系統 > android線程lock

android線程lock

發布時間:2022-05-31 14:14:33

Ⅰ 多線程中使用lock後是不是和單線程一樣

對的,因為加入lock後只有等待這個方法執行完成後才能執行下一個如果你多線程中都使用到了同一個方法那麼此方法將進入排隊狀態

Ⅱ 安卓在多線程編程中怎樣保證線程安全

1.將整個類加鎖 (代碼為synchronized(this))
2.定義一個object,訪問某些相關變數是,對該對象加鎖(代碼為synchronized(lockobj))。
新應用發布前如條件允許,最好做一下代碼混淆,市面上各種外掛或者篡改數據什麼的也比較常見,避免被破解利用。可以在一定程度上保護自己核心代碼演算法,提高破解/盜版/二次打包的難度,緩解代碼注入/動態調試/內存注入攻擊等
但也對應用的兼容性有一定影響,加殼技術不行的話,還會影響程序運行效率.
目前市面上有很多第三方加殼的平台, 如果應用需要加殼要選擇的話,可以先試試免費的,例如騰訊御安全,建議先去加固個包測試下兼容性。

android.permission.wake_lock 喚醒鎖定 允許程序在手機屏幕關閉後後台

寫一個監聽器放進service里,不要放在主線程

Ⅳ android 怎麼處理線程安全

UI線程及Android的單線程模型原則當應用啟動,系統會創建一個主線程(main thread)。這個主線程負責向UI組件分發事件(包括繪制事件),也是在這個主線程里,應用和Android的UI組件(components from the Android UI toolkit (components from the android.widget and android.view packages))發生交互。 當App做一些比較重(intensive)的工作的時候,除非合理地實現,否則單線程模型的performance會很poor。特別的是,如果所有的工作都在UI線程,做一些比較耗時的工作比如訪問網路或者資料庫查詢,都會阻塞UI線程,導致事件停止分發(包括繪制事件)。對於用戶來說,應用看起來像是卡住了,更壞的情況是,如果UI線程blocked的時間太長(大約超過5秒),用戶就會看到ANR(application not responding)的對話框。 另外,Andoid UI toolkit並不是線程安全的,所以不能從非UI線程來操縱UI組件。必須把所有的UI操作放在UI線程里,所以Android的單線程模型有兩條原則: 1.不要阻塞UI線程。 2.不要在UI線程之外訪問Android UI toolkit(主要是這兩個包中的組件:android.widget and android.view)。

Ⅳ android 強行關閉線程

這個好辦,這里有兩個線程吧,線程A
線程mSender。
設:讓線程A,監視線程mSender
第一步:
在A中定義一個變數:ExecutorService
transThread
=
Executors.newSingleThreadExecutor();
解釋:transThread
官方名稱是「單一線程池變數」,他是做什麼的呢,它就像我們給A的一塊賽車場,用來玩遙控賽車。
第二步:
在A中再定義一個變數:
Future
transPending;
解釋:transPending就像我給A一個用來控制遙控賽車的遙控器一樣
第三步:
在A中定義個線程mSender對象:
private
final
Runnable
mSender
=
new
Runnable()
{
public
void
run()
{
}};
解釋:這是你寫的對象,他就相當於我給A的一個遙控賽車。
第四步:
在A中添加如下語句:transPending
=
transThread.submit(mSender);
解釋:這一步就相當於把賽車(mSender)放入場地(第一步中我們定義的transThread),並且用遙控器「transPending」來控制他。
(註:這里你是否會有疑惑,我沒有寫"mSender.start()"之類的語句怎麼讓我的賽車跑起來啊(運行run()方法),放心,有了「transPending
=
transThread.submit(mSender);」這一步,賽車是自動跑起來的,也就是mSender會自動調用run的。)
第五步:
現在你可以用遙控器「transPending」干很多事情了
transPending.cancel(true);無論線程現在是否運行中,立刻終止。
transPending.cancel(false);當前線程若沒有運行(比如掛起狀態)就終止它。
transPending所做的不止這些。

Ⅵ android中,一個類里邊有兩個方法,比如A和B,線在有多個線程,都可以隨機的調用A或B,如何實現同步

public static void main(String[] args) {

S s = new S();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
s.A();
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
s.B();
}
}
});
t1.start();
t2.start();
}

public static class S {

public Object locka = new Object(), lockb = new Object();

public void A() {
synchronized (lockb) {
synchronized (locka) {
System.out.println("A");
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
locka.notify();
}
lockb.notify();
}
}

public void B() {
synchronized (locka) {
synchronized (lockb) {
System.out.println("B");
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
lockb.notify();
}
locka.notify();
}
}
}

Ⅶ 線程鎖的原理是什麼

線程鎖的原理:當對象獲取鎖時,它首先使自己的高速緩存無效,這樣就可以保證直接從主內存中裝入變數。

同樣,在對象釋放鎖之前,它會刷新其高速緩存,強制使已做的任何更改都出現在主內存中。 這樣,會保證在同一個鎖上同步的兩個線程看到在 synchronized 塊內修改的變數的相同值。

一般來說,線程以某種不必讓其他線程立即可以看到的方式(不管這些線程在寄存器中、在處理器特定的緩存中,還是通過指令重排或者其他編譯器優化),不受緩存變數值的約束。

(7)android線程lock擴展閱讀:

線程鎖在run()函數中使用QMutex實現同步,當多個線程訪問共享變數時,使用lock/trylock和unlock將共享變數包裹,以保證同步訪問共享變數。

如果不加鎖將會在2秒後同時修改num變數,將會導致線程不按照我們的想法執行,當前線程鎖定後,其他線程如果遇到共享變數將會等待解鎖;

使用QMutex上鎖解鎖時,當代碼提前退出有可能並未執行unlock(),若其他線程採用lock上鎖會一直被阻塞,導致內存溢出。

Ⅷ Android_lock怎麼用

1 Android中提供了一個名為WakeLock的類在android.os.PowerManager.WakeLock中,從名字來看WakeLock是喚醒鎖的意思,它可以控制屏幕的背光開關,所以在電源管理類。
WakeLock實例化方法比較簡單,因為是系統的遠程服務,通過下面的代碼來構造

復制代碼 代碼如下:
PowerManager pm = (PowerManager)
getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl =
pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "Android123");
//最後一個參數為實例名,可以換成其他的。
wl.acquire();
//喚醒點亮屏幕
//這個期間屏幕將點亮
wl.release();
//恢復屏幕到黑暗

2 當然Android考慮到安全並不是說開發者有了許可權,就可以隨意的控制屏幕的背光顯示或無,只有通過acquire點亮的背光才能使用release讓其關閉背光,如果直接調用release方法關閉屏幕將會產生一個異常。
從Android
2.1 API Level7開始增加了一個判斷屏幕是否處於點亮狀態可以使用public boolean isScreenOn ()這個方法,代碼為

復制代碼 代碼如下:
PowerManager pm = (PowerManager)
getSystemService(Context.POWER_SERVICE);
boolean isScreenOn =
pm.isScreenOn();


而對於Android 2.2 API
Level為8時增加了一個reboot(),可以重啟手機進入恢復模式,同時你需要申請許可權
來實現,不過Android開發網不保證該方法在所有固件上有效,部分廠商考慮到安全並沒有開發這個重啟方法

Ⅸ 在多線程中使用lock需要注意哪些地方

多線程就象是人體一樣,一直在並行的做許多工作,例如,人可以同時呼吸,血液循環,消化食物的。多線程可以將一個程序劃分成多個任務,他們彼此獨立的工作,以方便有效的使用處理器和用戶的時間.這種比喻精闢,只要我們的機器資源夠用,就要盡量提高程序的執行速度,這樣能讓用戶感到舒服。線程同步的方法:wait():使一個線程處於等待狀態,並且釋放所持有的對象的lock。sleep():使一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先順序。Allnotity():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。

Ⅹ Android中怎麼讓子線程執行完後在執行UI線程

你所說的是線程同步問題,給你提供三個思路:
1,使用同步監視器進行線程同步;
2,使用同步方法;
3,使用同步鎖LOCK對方法進行加鎖。
如果這三塊不知道,建議先看看Java基礎知識中的線程同步問題。

閱讀全文

與android線程lock相關的資料

熱點內容
不能修改的pdf 瀏覽:736
同城公眾源碼 瀏覽:474
一個伺服器2個埠怎麼映射 瀏覽:282
java字元串ascii碼 瀏覽:61
台灣雲伺服器怎麼租伺服器 瀏覽:461
旅遊手機網站源碼 瀏覽:316
android關聯表 瀏覽:929
安卓導航無聲音怎麼維修 瀏覽:322
app怎麼裝視頻 瀏覽:423
安卓系統下的軟體怎麼移到桌面 瀏覽:80
windows拷貝到linux 瀏覽:755
mdr軟體解壓和別人不一樣 瀏覽:888
單片機串列通信有什麼好處 瀏覽:324
游戲開發程序員書籍 瀏覽:848
pdf中圖片修改 瀏覽:275
匯編編譯後 瀏覽:480
php和java整合 瀏覽:835
js中執行php代碼 瀏覽:447
國產單片機廠商 瀏覽:62
蘋果手機怎麼設置不更新app軟體 瀏覽:289