(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個 則 進入等待...