執行緒的同步在多執行緒中是十分重要的,保證程式中多個執行緒有序執行不衝突,並且能夠達到程式設計師的要求。
同步的實現方面有兩種,分別是synchronized,wait與notify
wait():使乙個執行緒處於等待狀態,並且釋放所持有的物件的lock。
sleep():使乙個正在執行的執行緒處於睡眠狀態,是乙個靜態方法,呼叫此方法要捕捉interruptedexception異常。
notify():喚醒乙個處於等待狀態的執行緒,注意的是在呼叫此方法的時候,並不能確切的喚醒某乙個等待狀態的執行緒,而是由jvm確定喚醒哪個執行緒,而且不是按優先順序。
allnotity():喚醒所有處入等待狀態的執行緒,注意並不是給所有喚醒執行緒乙個物件的鎖,而是讓它們競爭。
注:wait(),notify():必須在synchronized內部使用。
第乙個列子:
運用synchronized同步有兩種方式:同步方法,同步方法塊
下面運用**測試來介紹一下synchronized同步的兩種方式
public class lockthread2 extends thread catch (exception e)
} }//同步方法塊
public void synchronizednei() catch (exception e)
}} }
public static void main(string args)
});thread lockthread2=new thread(new runnable()
});lockthread1.start();
lockthread2.start(); }
}
測試結果:按序輸出,先輸出1的執行緒,等1執行結束之後,在執行2的執行緒
如果去掉關鍵字synchronized,兩個執行緒將亂序輸出。
* 上面兩個測試方法,乙個同步方法乙個同步方法塊,並且啟動兩個執行緒進行測試,兩個執行緒都獲得了物件鎖,
* 只有當第乙個執行的執行緒執行完畢之後,第二線程才會繼續執行,保證兩個執行緒的執行順序,即先輸出完1,才輸出2
* 如果去掉關鍵字synchronized,兩個執行緒互相執行,誰先搶到了資源誰就執行,即亂序。
第二個列子:
前面介紹了運用同步關鍵字給物件家物件鎖的例子,這個例子是介紹用wait(),notify()給物件加鎖的操作。
這個例子是用鎖的方法實現輸出1212121212,我們都知道如果沒有給兩個執行緒進行加鎖,那麼輸出的結果就是亂序。
這個例子的思想就是:給兩個執行緒加相同的鎖,第乙個進入run方法的是執行緒t1,之後呼叫notify喚醒執行緒,使得t2能夠執行到,之後在t1執行完畢之後呼叫wait進行等待,這樣迴圈下去,就保證了兩個執行緒相互等待執行
package multithreed;
public class lockthread extends thread
/*** 第乙個進入run方法的是執行緒t1,之後呼叫notify喚醒執行緒,使得t2能夠執行到,之後在t1執行完畢之後呼叫wait進行等待
* */
@override
public void run() catch (interruptedexception e)
}} // todo auto-generated method stub
super.run();
} public static void main(string args)
}
執行結果:
C 併發操作 多執行緒
c 11 新標準中引入了幾個標頭檔案來支援多執行緒程式設計 thread 包含std thread類以及std this thread命名空間。管理執行緒的函式和類在 中宣告.atomic 包含std atomic和std atomic flag類,以及一套c風格的原子型別和與c相容的原子操作的函式...
多執行緒同步技術 二
5.semaphore semaphore是同一時間允許幾個程序同時獲取共享資源的,如下例 新建立了6個執行緒,設定最多只有2個執行緒,每次只有2個執行緒可以獲取資源,等到這個兩個執行緒執行完畢,釋放了執行緒鎖,然後餘下的執行緒可以繼續獲取鎖執行 6.autoresetevent manualres...
多執行緒同步
synchronized 物件 其中物件相當於乙個標誌 鎖 用於判斷 同步 塊 同步的前提必須是兩個或兩個以上的執行緒,且共用同乙個鎖 同步解決了多執行緒的安全問題 弊端 多執行緒需要判斷鎖,消耗了資源 同步函式 將synchronized放在函式名前面即可 即具有同步性質 使用的鎖是this 靜態...