[Java][華為云Java編程創(chuàng)造營][學(xué)習(xí)筆記][第三階段][05_Java多線程實(shí)戰(zhàn)][04_線程通信]

      網(wǎng)友投稿 658 2025-04-03

      [Java][華為云Java編程創(chuàng)造營][學(xué)習(xí)筆記][第三階段][05_Java多線程實(shí)戰(zhàn)][04_線程通信]

      4.1,線程通信機(jī)制

      線程間同步可以歸納為線程間通信的子集,對于線程通信指的是兩個線程之間可以交換一些實(shí)時的數(shù)據(jù)信息。

      線程是操作系統(tǒng)中獨(dú)立的個體,但這些個體如果不經(jīng)過特殊處理就不能成為一個整體,線程間的通信就成為整體的必用方式之一。

      當(dāng)線程存在通信指揮,系統(tǒng)間的交互性會更強(qiáng)大,在提高CPU利用率的同時還會使開發(fā)人員對線程任務(wù)在處理過程中進(jìn)行有效的把控與監(jiān)督。

      4.2,線程通信的wait和notify機(jī)制

      wait/notify方法實(shí)現(xiàn)線程間的通信:

      這兩個方法都是Object類的方法,換句話說Java為所有的對象都提供了這兩個方法。

      Lock和Condition實(shí)現(xiàn)線程間的通信:

      從Java 5開始,提供了Lock機(jī)制,同時還有處理Lock機(jī)制的通信控制的Condition接口。

      線程通信的wait/notify機(jī)制:

      等待/通知機(jī)制,是指線程A調(diào)用了對象的wait()方法進(jìn)入等待狀態(tài),而線程B調(diào)用了對象的notify()或notifyAll()方法,線程A收到通知后退出等待隊列,進(jìn)入可運(yùn)行狀態(tài),進(jìn)而執(zhí)行后續(xù)操作。

      從功能上說wait就是說線程在獲取對象鎖后,主動釋放對象鎖,同時本線程休眠。直到有其他線程調(diào)用對象的notify()喚醒該線程,才能繼續(xù)獲取對象鎖,并繼續(xù)執(zhí)行。

      wait()和notify()方法是Object類的方法。

      線程通信案例:

      class SumThread extends Thread { private int sum = 0; public void run() { synchronized (this) { for (int i = 0; i <= 100; i++) { sum += i; } /* * 算好后,通知和子線程持有同一個對象的鎖的被阻塞的線程解鎖繼續(xù)運(yùn)行 * 如果是當(dāng)前線程對象,默認(rèn)可以不寫this.notify(); * */ this.notify(); } } public int getSum() { return this.sum; } } public class Test { /* * 子線程計算1-100之和,算好后馬上通知主線程獲取計算的總和 * */ public static void main(String[] args) { SumThread st = new SumThread(); st.start(); synchronized (st) { try { System.out.println(Thread.currentThread().getName() + ",線程被阻塞"); //wait()和notify()是匹配,如果被wait(),一定要notify()喚醒解鎖 st.wait(); System.out.println(Thread.currentThread().getName() + ",線程收到的值為:" + st.getSum()); } catch (InterruptedException e) { e.printStackTrace(); } } } /* * 輸出結(jié)果 * main,線程被阻塞 main,線程收到的值為:5050 * */ }

      4.3,線程通信的Lock和Condition機(jī)制

      Lock和Condition通信機(jī)制:

      Lock用于控制多線程對需要競爭的共享資源的順序訪問,保證該狀態(tài)的連續(xù)性。

      Condition是Java提供了實(shí)現(xiàn)等待/通知的類,Condition對象是由Lock對象所創(chuàng)建的。

      Condition中的await()方法相當(dāng)于Object的wait()方法,Condition中的signal()方法相當(dāng)于Object的notify()方法。

      import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; class UserThread extends Thread { private Lock lock; private Condition condition; private int sum = 0; public UserThread(Lock lock, Condition condition) { this.lock = lock; this.condition = condition; } public void run() { lock.lock(); for (int i = 0; i <= 100; i++) { sum += i; } condition.signal(); lock.unlock(); } public int getSum() { return sum; } } public class Test { public static void main(String[] args) { //1,創(chuàng)建鎖 ReentrantLock lock = new ReentrantLock(); //2,監(jiān)視器 Condition condition = lock.newCondition(); UserThread ut = new UserThread(lock, condition); ut.start(); lock.lock(); System.out.println(Thread.currentThread().getName() + "-->被阻塞"); try { condition.await(); System.out.println(Thread.currentThread().getName() + "-->" + ut.getSum()); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } /* * 輸出結(jié)果 * main-->被阻塞 main-->5050 * */ } }

      Java 多線程

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:excel怎么生成二維碼
      下一篇:有很多相同的數(shù)據(jù)摻雜在一起。怎么篩選后讓相同的數(shù)據(jù)顯示在一起。兒后面的數(shù)據(jù)不會受到影響。跟之前的數(shù)據(jù)
      相關(guān)文章
      亚洲视频2020| 亚洲av无码乱码国产精品fc2| 亚洲另类激情综合偷自拍| 亚洲自偷自偷图片| 亚洲AV网站在线观看| 亚洲AV无码一区二区大桥未久| 亚洲中文字幕久久精品无码A| 亚洲午夜国产精品| 亚洲成年人免费网站| 亚洲美女视频网站| 亚洲综合久久1区2区3区| 亚洲成a人片在线观看播放| 亚洲福利电影在线观看| 亚洲中文无码a∨在线观看| 亚洲an日韩专区在线| 亚洲日韩AV一区二区三区中文| 亚洲精品无码专区久久| 久久精品国产亚洲AV未满十八| 久久精品国产亚洲AV电影网| 婷婷亚洲综合一区二区| 亚洲国产精品碰碰| 国产成人综合亚洲AV第一页| 亚洲午夜无码久久久久| 亚洲成Av人片乱码色午夜| 亚洲视频在线观看| 亚洲国产中文在线二区三区免| ww亚洲ww在线观看国产| 亚洲 欧洲 视频 伦小说| 亚洲大尺度无码无码专线一区| MM1313亚洲精品无码久久| jjzz亚洲亚洲女人| 在线亚洲精品自拍| 久久亚洲精品AB无码播放 | 久久亚洲sm情趣捆绑调教| 亚洲熟妇av一区| 亚洲欧洲无码AV不卡在线| 在线观看亚洲网站| 国产美女亚洲精品久久久综合| 久久精品夜色国产亚洲av| 337p日本欧洲亚洲大胆艺术| 国产成人精品亚洲日本在线|