《java多線程編程核心技術》讀書筆記3:線程間的通信

第三章:線程間的通信

 

Wait()方法:線程放棄鎖,進入等待狀態;

Notify()方法:喚起任意一個等待的線程,只喚起一個,而且是隨機的。

NotifyAll()方法:喚起所有等待的線程,這些線程,爭搶(鎖)運行的權利;當調用notify()方法時,當前正在執行的線程並不會馬上釋放鎖,而是要等帶當前的同步代碼塊執行完畢才釋放持有的鎖。

 

當線程程wait方法狀態的時候,調用interrupt()時,會產生InterruptedException();

 

如果通知方法過早的調用wait()方法就沒有執行的必要了。

 

 

線程之間可以通過管道進行通信:

字節流:PipedInutStreamPipedOutputStream

字符流:PipedReaderPipeWriter

將連個管道接通:inputStreamConnect(outputStream)

 

Join()方法:的作用是使所屬線程對象正常執行run()方法中的任務,而使當前線程進行無限期的阻塞,直到之前的線程銷燬後再繼續執行當前線程。

 

Join(long )sleep(long)的區別:

Join()方法在內部是使用wait()方法來實現的,所以具有釋放鎖的特點,

Sleep()方法不會釋放鎖;

 

 

ThreadLocal的使用:

變量值得共享可以使用public static的變量形式,所有線程都使用同一個變量,但是如果想實現每一個線程都有自己的共享變量該如何解決:使用ThreadLocal類。可以將ThreadLocal類比喻成全局存放數據的盒子,盒子中可以存儲每一個線程的私有數據。

ThreadLocal  ti = new ThreadLocal()t1.set(“sdsds”),設置值,獲得值用:t1.get();


當第一次調用get時會返回一個null值,但是如果希望返回的不是null則需要繼承ThreadLocal類並實現其initialValue()方法,返回你想要返回的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章