什麼是執行緒同步通訊呢?其實簡單來說就是執行緒間的等待與喚醒;
下面我們來了解一下:
1.簡單多執行緒通訊(現在有a、b執行緒,讓執行緒a先執行10次迴圈,隨後讓執行緒b執行20次,之後反覆100次;該如何實現呢?需要注意哪些問題?)
如下:
public class main}}
).start();
new thread(
new runnable() }}
).start();
}class business catch (interruptedexception e)
}for(int j=1;j<=10;j++)
exemark = false;
this.notify();//測試中阻塞佇列中只會有乙個執行緒
}public synchronized void thread_b(int i) catch (interruptedexception e)
}for(int j=1;j<=20;j++)
exemark = true;
this.notify();//測試中阻塞佇列中只會有乙個執行緒
}}}
上述**就實現了問題,但是我們需要注意的是一下幾點:
1.凡是採用多執行緒並且需要執行緒同步互斥的就需要用到鎖(synchronized等);
2.執行緒的等待、喚醒必須配合synchronized;
3.在實現方法中把if換成while,會使程式的健壯性更高,更合理。因為有時候執行緒會被偽喚醒;
傳統執行緒同步通訊技術
package cn.com.songjy.test.socket.thread import org.apache.commons.logging.log import org.apache.commons.logging.logfactory classname traditionalthrea...
Java傳統執行緒同步通訊
講過了執行緒互斥,接下來了解一下執行緒協作,使得多個任務彼此之間可以一起工作去解決某個問題。傳統定時器和執行緒互斥技術 當任務協作時,關鍵是這些問題之間的握手。為了實現這種握手我們使用了相同的基礎特性 互斥。互斥能夠確保只有乙個任務可以響應某種訊號,這樣就可以排除任何可能的競爭條件。在互斥之上,我們...
黑馬程式設計師 Java中傳統執行緒同步通訊技術
方法簽名 public final void wait throws interruptedexception 導致當前執行緒等待直到另乙個執行緒在這個物件上呼叫notify 方法或者notifyall 方法。換句話說,這個方法的表現就像它簡單的處理呼叫wait 0 方法。當前執行緒必須擁有這個物件...