多執行緒同步操作 多執行緒技術三

2021-08-18 19:32:51 字數 1968 閱讀 7048

執行緒的同步在多執行緒中是十分重要的,保證程式中多個執行緒有序執行不衝突,並且能夠達到程式設計師的要求。

同步的實現方面有兩種,分別是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 靜態...