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();

}

}



原创粉丝点击