第三章:線程間的通信
Wait()方法:線程放棄鎖,進入等待狀態;
Notify()方法:喚起任意一個等待的線程,只喚起一個,而且是隨機的。
NotifyAll()方法:喚起所有等待的線程,這些線程,爭搶(鎖)運行的權利;當調用notify()方法時,當前正在執行的線程並不會馬上釋放鎖,而是要等帶當前的同步代碼塊執行完畢才釋放持有的鎖。
當線程程wait方法狀態的時候,調用interrupt()時,會產生InterruptedException();
如果通知方法過早的調用wait()方法就沒有執行的必要了。
線程之間可以通過管道進行通信:
字節流:PipedInutStream和PipedOutputStream
字符流:PipedReader和PipeWriter
將連個管道接通:inputStream。Connect(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()方法,返回你想要返回的值。