多線程之間如何實現通訊?


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(), 喚醒線程。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM