『壹』 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();
}
}
}
『貳』 如何修改android手機的同步設置
修改android手機的同步設置:
Android自帶了同步功能之賬戶與同步:
(1)點擊「設置」,「賬戶與同步」選項。
(2)進人賬戶與同步設置後,勾選「背景數據『和」自動同步』這兩個選項,並且點擊要進行同步的賬戶,也可以不勾選自動同步選項進而採取手動同步。
(3)設置自動同步後。手機會自動連接網路同步,這樣就完成了手機里聯系人的同步。
『叄』 安卓手機設置中的自動同步是什麼功能
1.
android手機自帶了同步功能,也就是說在手機「設置」里「賬戶與同步」選項點擊進入後,登錄賬戶後,可以勾選設置「聯系人」、「日歷」「簡訊」、「通話記錄」「相冊」、等等有關數據,「自動同步」。
2.
同步功能,可以設置為手動同步和自動同步,自動同步下可以設置為「wifi下自動同步」這樣就不會浪費手機數據流量。
3.
設置好之後,即使有天換了個手機,登錄賬戶點選同步,也就能找回原來的信息了,是這個時代不錯的雲存儲同步功能。
『肆』 android中怎樣讓main線程和子線程同步一個變數
1、檢查Thread,確定沒有在Background thread中直接調用adapter,如果有,請移除相關代碼到Handler中處理;
2、盡量將數據放在adapter類中管理,不需要的時候清除信息(勤寫clear()),及時用notifyDataSetChanged()刷新;
3、在Activity或者Fragment合適的位置(onPause/onStop)要及時檢查thread,有adapter數據處理相關的應馬上停止;
4、這個錯誤經常出現在Activity休眠起來之後,主要還是使用adapter不太小心造成的。如果實在找不到原因,在onPause()函數中停止所有的background thread,並且在onResume()函數最前面清空adapter中的數據,並且adapter.notifyDataSetChanged()。然後重新更新載入數據,這樣一般可以解決問題。
『伍』 Android如何跨進程同步
兩個進程要進行同步,如果用IPC機制通信來同步,那麼就會遇到一個問題,那就是這兩個進程必須都已經啟動才可以,如果遇到一個進程啟動,但是另外一個進程不知道什麼時候啟動,這個辦法就很難行得通了。
這時候就可以用到Android系統根據java提供的 FileLock 類
1.FileLock是線程安全的
2.FileLock適用於進程間文件讀寫控制,不適用於同一進程的不同線程
3.分為共享鎖和獨占鎖,共享鎖允許其他進程同樣獲取共享鎖,獨占鎖不允許其他進程獲得鎖。
4.有兩種方式獲得文件鎖,FileChannel的lock和tryLock,用lock會阻塞當前線程,直到獲取到鎖,用tryLock會嘗試獲取,如果獲取失敗則返回null,不會阻塞線程。
5.FileLock釋放的條件是:自己調用release/close或者所使用的FileChannel調用close或者是JVM終止運行。
6.文件鎖的效果是與操作系統相關的。一些系統中文件鎖是強制性的,當Java的某進程獲得文件鎖後,操作系統將保證其它進程無法對文件做操作了。而另一些操作系統的文件鎖是詢問式的(advisory),意思是說要想擁有進程互斥的效果,其它的進程也必須也按照API所規定的那樣來申請或者檢測文件鎖,不然將起不到進程互斥的功能。所以文檔里建議將所有系統都當做是詢問式系統來處理,這樣程序更加安全也更容易移植。
我們這里用的就是獨占鎖。
這個是先運行的獲取鎖的類,獲取鎖後持有10s後釋放。
這個類是在第一個類運行後再運行的類,此時該進程會一直等到FileLockTest釋放鎖後才能獲得鎖然後繼續運行。我們可以在獲得鎖之後do any thing you want,從而實現進程間同步。
多次運行後可能有人會發現有時候先列印獲得鎖後列印釋放鎖,其實是這樣的,這是兩個進程,一個進程釋放鎖之後另外一個進程才可能獲得鎖,但是兩個進程的列印時間的執行不是同步的,所以不一定是先列印釋放鎖,只要時間基本一致即可(本人多次運行時間差小於2ms)。
通過這兩個類的分別運行,可以看到即使不是都啟動完成,一樣可以跨進程同步。