并发编程-concurrent.util工具类中的使用
来源:互联网 发布:java培训ujiuye 编辑:程序博客网 时间:2024/06/05 17:50
概念:
该工具包下的类是用于在多任务下并发工具类。
1、CountDownLatch
该类类似于wait,notify的作用。
应用场景:在多线程并发中,一个线程执行前提是需要另一个线程执行之后才能执行。
其中final CountDownLatch countDown=new CountDownLatch(2);构造函数中的参数表示其它线程调用countDown.countDown()的次数。也就是说如果是2,那么在其它线程中调用两次countDown()方法,才会唤醒等待线程的执行。
import java.util.concurrent.CountDownLatch;
public class CountDownLatchs {
public static void main(String[] args) {
final CountDownLatch countDown=new CountDownLatch(2);
Thread thread1=new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("任务一开始执行");
try {
countDown.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
System.out.println("任务一执行完成");
}
});
Thread thread2=new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("任务二开始执行");
countDown.countDown();;
System.out.println("唤醒任务一执行");
}
});
Thread thread3=new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("任务三开始执行");
countDown.countDown();;
System.out.println("唤醒任务一执行");
}
});
thread1.start();
thread2.start();
thread3.start();
}
}
2、CyclicBarrier
几运动员在比赛时,如果有一个运动员没有准备好,那么比赛就不 能开始,只有所有运动员都准备好后,比赛才开始。
import java.lang.reflect.Executable;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CylicBarriers implements Runnable {
private CyclicBarrier barrier;
private String name ;
public CylicBarriers(CyclicBarrier barrier,String name) {
// TODO Auto-generated constructor stub
this.barrier=barrier;
this.name=name;
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("运动员---"+this.name+"--准备ok");
try {
this.barrier.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("运动员-----"+this.name+"---go");
}
public static void main(String[] args) {
CyclicBarrier barrier=new CyclicBarrier(2);
ExecutorService executor= Executors.newFixedThreadPool(2);
executor.execute(new CylicBarriers(barrier,"张三"));
executor.execute(new CylicBarriers(barrier,"李四"));
executor.shutdown();
}
}
- 并发编程-concurrent.util工具类中的使用
- 互联网架构(4):并发编程--Concurrent.util工具类
- 使用util.concurrent并发包下的工具类,实现实时通知对方线程
- java.util.concurrent java 并发包中的类
- java并发编程:java.util.concurrent
- java并发编程(3)--java.util.concurrent.*
- java并发编程3:使用JDK并发包(java.util.concurrent)构建程序
- Java并发编程-并发工具包(java.util.concurrent)使用指南(全)
- Java并发编程-并发工具包(java.util.concurrent)使用指南(全)
- Java并发编程-并发工具包(java.util.concurrent)使用指南(全)
- Java并发编程-并发工具包(java.util.concurrent)使用指南(全)
- Java并发编程-并发工具包java.util.concurrent使用指南
- java.util.concurrent(在并发编程中很常用的实用工具类)
- Java并发编程之java.util.concurrent包UML结构
- (十一)java并发编程--java.util.concurrent.Callable
- Java并发中的原子操作包java.util.concurrent.atomic
- JDK 1.5 使用java.util.concurrent开发并发应用
- JDK 1.5 使用java.util.concurrent 开发并发应用
- 如何通读C语言C++代码
- 天梯赛练习题 帅到没朋友
- windows下搭建机器学习环境(python)
- 153 Find Minimum in Rotated Sorted Array
- 算法训练 数字三角形
- 并发编程-concurrent.util工具类中的使用
- QT打开摄像头教程
- hdu 2546 饭卡
- 画一条虚线
- Amortize analysis
- 破解了XXTEA加密的《大富翁9》资源文件
- APUE读书笔记---System v消息队列
- BZOJ3295: [Cqoi2011]动态逆序对
- Intent跳转相关