執行緒 同步執行緒和協作執行緒

2021-09-24 23:02:16 字數 1459 閱讀 6001

(1)同步塊

**實現:

package edu.xalead;

public class 吃包子 extends thread

// public synchronized void eat()

public void run()

} catch (interruptedexception e)

/*** 多執行緒的爭用問題:

* 會出現兩個執行緒共享乙個物件時,一線程封裝完,但沒執行this.p.pack--;

* 導致另一線程到了分時執行時重複執行,但實際上,一物件只能使用或呼叫一次

* 解決該問題的思想:加鎖,一線程使用一物件完成後,再進行另一線程的具體操作。

*/

(2) 同步方法

**實現:

package edu.xalead;

public class 包子類 extends edu.xalead.comunication.包子類

}

package edu.xalead;

public class test

}

package edu.xalead.comunication;

import edu.xalead.comunication.做包子;

public class 做包子 extends thread

public void run() else }}

}catch (interruptedexception e) }}

package edu.xalead.comunication;

public class 包子類

package edu.xalead.comunication;

public class 吃包子 extends thread

public void run() else

}thread.sleep(1);

} catch (interruptedexception e)

**測試:

package edu.xalead.comunication;

import edu.xalead.包子類;

import edu.xalead.吃包子;

public class test

}

執行結果:

p.wait(); 釋放鎖,執行緒數改為0; p.notify(); 喚醒(做包子的)物件。

執行緒之間的協作可以大大減少執行緒等待的時間,提高了效率。

執行緒間的共享和協作

執行緒間的協作 synchroniezd 可以修飾方法或者以同步塊的方式使用。它可以確保多個執行緒在同一時刻,只能有乙個執行緒處於方法或者同步 塊中,保證了執行緒對於變數的訪問的可見性與排他性,又稱之為內鎖機制。物件鎖和類鎖 物件鎖是用於物件例項方法,或者乙個物件例項上的,類鎖是用於類的靜態方法或者...

執行緒間的協作同步

幫朋友看時候學了一下這方面知識 有錯誤請糾正 wait notify 和notifyall condition 在condition物件中,與wait,notify和notifyall方法對應的分別是await,signal,signalall。但是,condition對object進行了擴充套件,...

執行緒 執行緒協作 管程法

wait 讓執行緒堵塞 notifyall 通知執行緒接觸堵塞mq 的思想,列 生產者生產,消費者消費,通過緩衝區 生產者生產100個摸頭,消費者買饅頭。消費者從緩衝區取饅頭,如果饅頭已賣完,就進入等待,等生產者做饅頭,放到容器裡,再通知消費者取饅頭,如果生產者已經再容器裡生產100個 則 進入等待...