Java對多線程程序的支持能夠說是現存語言中最爲完美的,即便C++0X今年真的能出來,也沒法改變這一點。咱們知道,每一個Java對象均可以當成一個 鎖來使用,synchronize關鍵字會幫咱們搞定一切的。那麼爲何每一個Java對象都有wait()/notify()方法呢?
答 案很簡單,synchronize關鍵字能同步對共享資源的訪問。只要正確的使用了synchronize關鍵字,程序就能夠保證任意時刻都只有一個線程 能訪問共享資源。這解決了一部分問題。更進一步,咱們還須要考慮到資源一般不是無限的。假如一個共享的隊列中沒有任何元素,那麼全部嘗試從隊列中獲取元素 的線程就沒法成功。那麼這些線程怎麼辦呢?「忙等」顯然不是一個好方法。這時咱們就用獲得wait()/notify()方法了。當線程檢測到隊列爲空 時,他們調用隊列對象的wait()方法從而進入暫停執行狀態,而當某個線程成功的向隊列中放入元素以後,它調用notify()方法喚醒一個等待的線 程。這樣,整個流程就完美的創建起來了。
另外,咱們須要注意wait()和notify()方法只有在獲取了隊列對象的鎖以後才能被調用,這是必要的。若是不這麼作,就有可能出現隊列中有元素,而某些線程卻處於等待狀態的現象。多線程