久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java并發(fā)編程線程間通訊實(shí)現(xiàn)過(guò)程詳解

瀏覽:4日期:2022-09-01 17:18:04

在Java中線程間通訊有多種方式,我這里列出一些常用方式,并用代碼的方式展示他們是如何實(shí)現(xiàn)的:

共享變量 wait, notify,notifyAll(這3個(gè)方法是Object對(duì)象中的方法,且必須與synchronized關(guān)鍵字結(jié)合使用) CyclicBarrier、CountDownLatch 利用LockSupport Lock/Condition機(jī)制 管道,創(chuàng)建管道輸出流PipedOutputStream和管道輸入流PipedInputStream

示例一:

package com.zhi.test;import java.util.concurrent.CountDownLatch;import java.util.concurrent.atomic.AtomicInteger;import org.junit.Test;/** * Java多線程-線程通訊示例<br> * flag作為共享變量JobB執(zhí)行,notify通知Job執(zhí)行,CountDownLatch通知主線程執(zhí)行 * * @author 張遠(yuǎn)志 * @since 2020年5月4日21:51:24 * */public class ThreadTest2 { private CountDownLatch latch; private volatile boolean flag = true; private Object lock = new Object(); private AtomicInteger num = new AtomicInteger(0); class JobA implements Runnable { @Override public void run() { synchronized (lock) {flag = false;if (num.get() != 3) { try { lock.wait(); // wait方法會(huì)釋放鎖 } catch (InterruptedException e) { }}System.out.println('任務(wù)A收到通知,繼續(xù)執(zhí)行作業(yè)'); } latch.countDown(); } } class JobB implements Runnable { @Override public void run() { while (flag) { // 保證JobA先申請(qǐng)到鎖 } synchronized (lock) {for (int i = 1; i <= 5; i++) { try { Thread.sleep(1000); } catch (InterruptedException e) { } int a = num.incrementAndGet(); System.out.println('任務(wù)B第' + i + '次執(zhí)行,num值為:' + a); if (a == 3) { lock.notify(); // 喚醒JobB線程,notify方法不會(huì)釋放鎖 }} } latch.countDown(); } } @Test public void test() { latch = new CountDownLatch(2); new Thread(new JobA()).start(); new Thread(new JobB()).start(); try { latch.await(); // 保證2個(gè)線程都執(zhí)行完畢 } catch (InterruptedException e) { } }}

結(jié)果輸出:

任務(wù)B第1次執(zhí)行,num值為:1任務(wù)B第2次執(zhí)行,num值為:2任務(wù)B第3次執(zhí)行,num值為:3任務(wù)B第4次執(zhí)行,num值為:4任務(wù)B第5次執(zhí)行,num值為:5任務(wù)A收到通知,繼續(xù)執(zhí)行作業(yè)

示例二:

package com.zhi.test;import java.util.concurrent.CountDownLatch;import java.util.concurrent.locks.LockSupport;import org.junit.Test;/** * Java多線程-線程通訊示例,利用LockSupport * * @author 張遠(yuǎn)志 * @since 2020年5月4日21:51:24 * */public class ThreadTest3 { private CountDownLatch latch; private volatile int num = 0; private Thread ta; private Thread tb; class JobA implements Runnable { @Override public void run() { if (num != 3) {LockSupport.park(); } System.out.println('任務(wù)A收到通知,繼續(xù)執(zhí)行作業(yè)'); latch.countDown(); } } class JobB implements Runnable { @Override public void run() { for (int i = 1; i <= 5; i++) {try { Thread.sleep(1000);} catch (InterruptedException e) {}num++;System.out.println('任務(wù)B第' + i + '次執(zhí)行,num值為:' + num);if (num == 3) { LockSupport.unpark(ta); // unpark會(huì)立即激活傳入線程} } latch.countDown(); } } @Test public void test() { latch = new CountDownLatch(2); ta = new Thread(new JobA()); tb = new Thread(new JobB()); ta.start(); tb.start(); try { latch.await(); // 保證2個(gè)線程都執(zhí)行完畢 } catch (InterruptedException e) { } }}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 男女视频网站 | h片观看 | 成人1区2区 | 国产一区二区三区四区五区加勒比 | 天天精品视频免费观看 | 精品www| 亚洲aaa| 中文字幕在线看第二 | 欧美狠狠操 | 99爱视频 | 日日干夜夜操 | 五月婷婷激情 | 欧美在线综合 | 香蕉久久av一区二区三区 | 国产精品成人av | www操com| 午夜国产羞羞视频免费网站 | 国产福利91精品一区二区 | 国产精品久久久久久久久久久新郎 | 91精品久久久久久9s密挑 | a久久免费视频 | 日本一区二区三区视频免费看 | 一级大毛片 | 伊人伊人网 | 亚洲精品一区二区网址 | 国产一区二区三区在线 | 中国一级特黄毛片大片 | 一区精品视频 | 欧美日韩久久久 | 免费成人在线电影 | 国产一区二区三区视频在线观看 | 国产精品18 | 免费av一区二区三区 | 欧美自拍视频在线 | 日韩av视屏 | 日本99精品 | 色av色av色av | 亚洲一区国产视频 | 久久久久久久一区 | 欧美日韩国产在线观看 | a网站在线观看 |