第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

Java線程與并發(fā)編程實(shí)踐----同步器(倒計(jì)時門閂,同步屏障)

標(biāo)簽:
Java

    Java提供的synchronized关键字对临界区进行线程同步访问。由于基于synchronized很难

正确编写同步代码,并发工具类提供了高级的同步器。倒计时门闩(countdown latch)、同步屏

障(cyclic barrier)、交换器(exchanger)、信号量(semaphore)以及phaser同步器。下面主要

介绍倒计时门闩同步屏障

    倒计时门闩会导致一条或多条线程在“门口”一直等待,直到另一条线程打开这扇门,线程

才得以继续运行。他是由一个计数变量和两个操作组成的,这两个操作分别是“导致一条线程等待直到

计数变为0”以及“递减计数变量”。

实现类:java.util.concurrent.CountDownLatch


    以下代码是用倒计时门闩实现的一个是所有线程同时执行同时结束之后,才能继续执行主线程:

import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class Test {	final static int NTHREADS = 3;	public static void main(String[] args) {		final CountDownLatch startSignal = new CountDownLatch(1);		final CountDownLatch doneSignal = new CountDownLatch(NTHREADS);		Runnable r = new Runnable() {						@Override			public void run() {				try {					System.out.println(Thread.currentThread().getName() + "进入等待");					startSignal.await();					System.out.println(Thread.currentThread().getName() + "开始执行任务");					Thread.sleep(200);					doneSignal.countDown();				} catch (InterruptedException e) {					e.printStackTrace();				}			}		};		ExecutorService es = Executors.newFixedThreadPool(NTHREADS);		for (int i = 0; i < NTHREADS; i++) {			es.execute(r);		}			try {				Thread.sleep(1000);				startSignal.countDown();				System.out.println(Thread.currentThread().getName() + "进入等待");				doneSignal.await();				System.out.println(Thread.currentThread().getName() + "开始执行");				es.shutdownNow();							} catch (InterruptedException e) {				e.printStackTrace();			}	}}

下面讲解同步屏障:

    若有多条线程,他们到达屏障时将会被阻塞,只有当所有线程都到达屏障时才能打开屏障,

所有线程同时执行,若有这样的需求可以使用同步屏障。此外,当屏障打开的同时还能指定执行的任务。

// 创建同步屏障对象,并制定需要等待的线程个数 和 打开屏障时需要执行的任务CyclicBarrier barrier = new CyclicBarrier(3,new Runnable(){    public void run(){        //当所有线程准备完毕后触发此任务    }});// 启动三条线程for( int i=0; i<3; i++ ){    new Thread( new Runnable(){        public void run(){            // 等待,(每执行一次barrier.await,同步屏障数量-1,直到为0时,打开屏障)            barrier.await();            // 任务            任务代码……        }    } ).start();}

倒计时门闩 与 同步屏障 的区别 倒计时门闩只会阻塞一条线程,目的是为了让该条任务线程满足条件后执行;

 而同步屏障会阻塞所有线程,目的是为了让所有线程同时执行

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報(bào)

0/150
提交
取消