1. 什么是多線程之間通訊?
多線程之間通訊,其實就是多個線程在操作同一個資源,但是操作的動作不同。
2.多線程通訊方式
wait():當前線程等待,類似於sleep(),可以讓當前線程,從運行狀態變為阻塞(休眠)狀態,wait()使用在多線程之間同步,和synchronzied一起使用。
注:wait()和sleep()的區別?
對於sleep(),我們首先要知道改方法屬於Thread類中,而wait()屬於object類中。
sleep()導致了程序暫停執行指定的時間,讓出CPU給其他線程,到了指定的時間,又會自動恢復運行狀態。
sleep()不會釋放鎖,wait()可以釋放鎖。
notify():和wait()一起使用,喚醒使用wait()等待的線程,線程狀態從阻塞變為運行。
notifyAll():效果跟notify()一樣,notify()喚醒單個線程,notifyAll()喚醒多個線程。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
jdk1.5並發包:lock,線程池Executor,Condition
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
lock():該接口(以及相關實現類)用來實現鎖功能,該接口提供了與synchronized關鍵字類似的同步功能,但需要使用時手動獲取和釋放鎖。
獲取鎖:lock.lock();
釋放鎖:lock.unlock();
Condition():類似於Object的wait(),notify(),notifyAll()的功能,起到使線程阻塞和喚醒線程的作用。
condition.await():類似wati(),阻塞線程。
condition.Signal(); 類似notify(),喚醒線程。
condition.Signalall(); 類似notifyAll(), 喚醒線程。