您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)怎么在java中實(shí)現(xiàn)線程通信,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
Java是一門面向?qū)ο缶幊陶Z(yǔ)言,可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序。
一、線程通信目的
為了更好的協(xié)作,線程無(wú)論是交替式執(zhí)行,還是接力式執(zhí)行,都需要進(jìn)行通信告知。
二、線程通信方法
1.join
一個(gè)線程等待另一個(gè)線程執(zhí)行完畢后再執(zhí)行。join其實(shí)合理理解成是線程合并,當(dāng)在一個(gè)線程調(diào)用另一個(gè)線程的join方法時(shí),當(dāng)前線程阻塞等待被調(diào)用join方法的線程執(zhí)行完畢才能繼續(xù)執(zhí)行,所以join的好處能夠保證線程的執(zhí)行順序,但是如果調(diào)用線程的join方法其實(shí)已經(jīng)失去了并行的意義,雖然存在多個(gè)線程,但是本質(zhì)上還是串行的,最后join的實(shí)現(xiàn)其實(shí)是基于等待通知機(jī)制的。
2.wait/notify
在一個(gè)線程內(nèi)調(diào)用該線程鎖對(duì)象的wait方法,線程將進(jìn)入等待隊(duì)列進(jìn)行等待直到被通知或者被喚醒。
3.CountdownLatch
一個(gè)線程等待(countDownLatch.await())其他任意個(gè)數(shù)的線程執(zhí)行完畢后(countDownLatch.countDown())再執(zhí)行
4.CyclicBarrier
所有線程先各自準(zhǔn)備,當(dāng)所有線程都準(zhǔn)備完畢(全部都調(diào)用了cyclicBarrier.await())后統(tǒng)一開(kāi)始執(zhí)行后續(xù)操作
5.Semaphore
可以控制同時(shí)訪問(wèn)的線程個(gè)數(shù),通過(guò)acquire()獲取一個(gè)許可,如果沒(méi)有就等待,而release()釋放一個(gè)許可
6.Callable
子線程將執(zhí)行結(jié)果返回給父線程
FutureTask<Integer> futureTask = new FutureTask<>(callable); new Thread(futureTask).start(); Object result = futureTask.get();
(1)CountDownLatch和CyclicBarrier都能夠?qū)崿F(xiàn)線程之間的等待,只不過(guò)它們側(cè)重點(diǎn)不同:
(2)CountDownLatch一般用于某個(gè)線程A等待若干個(gè)其他線程執(zhí)行完任務(wù)之后,它才執(zhí)行;
(3)CyclicBarrier一般用于一組線程互相等待至某個(gè)狀態(tài),然后這一組線程再同時(shí)執(zhí)行;
(4)另外,CountDownLatch是不能夠重用的,而CyclicBarrier是可以重用的。
(5)Semaphore其實(shí)和鎖有點(diǎn)類似,它一般用于控制對(duì)某組資源的訪問(wèn)權(quán)限。
以上就是怎么在java中實(shí)現(xiàn)線程通信,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。