博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CountDownLatch线程同步辅助
阅读量:6248 次
发布时间:2019-06-22

本文共 1864 字,大约阅读时间需要 6 分钟。

hot3.png

在上一篇文章中写道用一个静态的变量保存线程的执行状态,并用时间等待的方法后来仔细考虑,其实是

线程不安全的.多个线程同时执行这个类时,这个静态变量的值就不能保证了.

用一个线程同步的Map保存这个值,勉强能实现[每个线程生产一个不重复的map的key]

但是这样很麻烦.

java. util. concurrent.CountDownLatch 

却能完美的实现.能线程安全的计数,因为每个实现的主线程在并发的情况下java.util.concurrent.CountDownLatch; 是新的实例 不会像上一篇一样需要处理计数器的线程安全.

具体代码如下

package org.masque.effective;import java.util.concurrent.CountDownLatch;import java.util.concurrent.TimeUnit;/** *  * @author masque.java@gmail.com * */public class ThreadTest {	public static void main(String[] args) throws InterruptedException {		CountDownLatch latch=new CountDownLatch(3);//数量标示线程的个数		(new Thread1(latch)).start();		(new Thread2(latch)).start();		(new Thread3(latch)).start();		latch.await();//等待线程执行完成.还有一个重载的方法可以设置超时时间		System.out.println("over!");	}}class Thread1 extends Thread{		CountDownLatch latch;		public Thread1(CountDownLatch latch){		this.latch = latch;	}		@Override	public void run() {		for (int i=10;i<20;i++) {			System.out.println("Thread1===========:"+i);			try {				TimeUnit.SECONDS.sleep(1);			} catch (InterruptedException e) {				e.printStackTrace();			}		}		latch.countDown();//完成后计数	}}class Thread2 extends Thread{		CountDownLatch latch;		public Thread2(CountDownLatch latch){		this.latch = latch;	}		@Override	public void run() {		for (int i=10;i<20;i++) {			System.out.println("Thread2===========:"+i);			try {				TimeUnit.SECONDS.sleep(1);			} catch (InterruptedException e) {				e.printStackTrace();			}		}		latch.countDown();//完成后计数	}}class Thread3 extends Thread{		CountDownLatch latch;		public Thread3(CountDownLatch latch){		this.latch = latch;	}		@Override	public void run() {		for (int i=10;i<20;i++) {			System.out.println("Thread3===========:"+i);			try {				TimeUnit.SECONDS.sleep(1);			} catch (InterruptedException e) {				e.printStackTrace();			}		}		latch.countDown();//完成后计数	}}

 

转载于:https://my.oschina.net/bughope/blog/403733

你可能感兴趣的文章
华为oj 挑7
查看>>
【吴恩达机器学习】学习笔记——1.5无监督学习
查看>>
使用pjax实现类似github无刷新更改页面url
查看>>
移动端头部meta
查看>>
回溯法
查看>>
iOS常用宏定义
查看>>
memcached(一)--前言
查看>>
【转】各种排序算法时间复杂度和空间复杂度表
查看>>
Redis客户端集群
查看>>
EF异常:WebForm、Console、Winform层不引入EF报错
查看>>
System系统类常用方法
查看>>
15:开发Rsync服务启动脚本案例
查看>>
uva 1592(NEERC 2009 STL)
查看>>
Xqk.Data数据框架使用说明之:使用Xqk.Data的一般步骤
查看>>
makefile
查看>>
C#数据类型
查看>>
HDU_3172_带权并查集
查看>>
Ryubook_1_switch_hub_源码
查看>>
Java几种路径的获取
查看>>
痞子衡嵌入式:ARM Cortex-M文件那些事(4)- 可重定向文件(.o/.a)
查看>>