concurrent常用类(一)
来源:互联网 发布:淘宝被发现虚假交易 编辑:程序博客网 时间:2024/06/03 21:31
CountDownLatch 经常用于监听某些初始化操作,等初始化执行完毕之后,通知主线程继续工作.针对的是一个线程
public class UseCountDownLatch {
public static void main(String[] args) {
final CountDownLatch countDown = new CountDownLatch(2);//通知两次执行
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
try {
System.out.println("进入线程t1,等待其他线程处理完成...");
countDown.await();
System.out.println("t1线程继续执行");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
},"t1");
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
try {
System.out.println("t2线程初始化...");
Thread.sleep(3000);
System.out.println("t2通知t1线程继续执行");
countDown.countDown();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
},"t2");
Thread t3 = new Thread(new Runnable() {
@Override
public void run() {
try {
System.out.println("进入线程t3初始化...");
Thread.sleep(4000);
System.out.println("t3通知t1线程继续执行");
countDown.countDown();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
},"t3");
t1.start();
t2.start();
t3.start();
}
}
CyclicBarrier 多个线程都是参与阻塞
public class UseCyclicBarrier {
static class Runner implements Runnable{
private CyclicBarrier barrier;
private String name;
public Runner(CyclicBarrier barrier,String name) {
this.barrier = barrier;
this.name = name;
}
@Override
public void run() {
try {
Thread.sleep(1000*(new Random().nextInt(5)));
System.out.println(name+"准备OK");
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(name + "Go");
}
}
public static void main(String[] args) {
CyclicBarrier barrier = new CyclicBarrier(3);//3个都准备好了 开始执行
ExecutorService executor = Executors.newFixedThreadPool(3);
executor.submit(new Thread(new Runner(barrier, "张三")));
executor.submit(new Thread(new Runner(barrier, "李四")));
executor.submit(new Thread(new Runner(barrier, "王五")));
executor.shutdown();
}
}
- concurrent常用类(一)
- concurrent常用类(二)
- JDK常用类_util.concurrent
- java 多线程 Concurrent.util常用类
- Java concurrent常用实例
- Concurrent 介绍一
- java.util.concurrent 包下常用的类
- java.util.concurrent 包下常用的类(二)
- java.util.concurrent包下的几个常用类
- java.util.concurrent包下的几个常用类
- java.util.concurrent包下的几个常用类
- Concurrent.util 常用类的介绍和使用
- java线程安全之Concurrent.util常用类(十六)
- 同步工具类一:闭锁(java.util.concurrent.CountDownLatch)
- 同步工具类一:闭锁(java.util.concurrent.CountDownLatch)
- Concurrent包常用方法简介
- Concurrent包常用方法简介
- concurrent套件新增类
- 简单的窗口拖动
- ES6顶层对象的属性
- unity 计算时间的插差值
- Codeforces 592D
- 有监督学习(分类、回归)
- concurrent常用类(一)
- ThinkPHP3.1教程新特性:动态设置自动完成和自动验
- 域名带www和不带的区别
- 兼容性编程经验
- 学习笔记-微信授权登录
- PHP 数组排序
- oracle 数据库创建表
- 通过java语言去LDAP检索信息
- Linux下使用Python实现定时push到github