示例一:CountDownLatch类
import java.util.concurrent.CountDownLatch;
public class UserCountDownLatch {
private CountDownLatch latch = new CountDownLatch(2);
public void method1(){
try {
System.out.println("进入到method1。。");
System.out.println("method1等待。。");
latch.await();
System.out.println("继续运行到method1。。");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void method2(){
try {
System.out.println("进入到method2。。");
Thread.sleep(1000);
System.out.println("继续运行到method2。。");
System.out.println("通知method1继续运行。。");
latch.countDown();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void method3(){
try {
System.out.println("进入到method3。。");
Thread.sleep(1000);
System.out.println("继续运行到method3。。");
System.out.println("通知method1继续运行。。");
latch.countDown();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
final UserCountDownLatch user = new UserCountDownLatch();
Thread t1 = new Thread(new Runnable() {
public void run() {
user.method1();
}
});
Thread t2 = new Thread(new Runnable() {
public void run() {
user.method2();
}
});
Thread t3 = new Thread(new Runnable() {
public void run() {
user.method3();
}
});
t1.start();
t2.start();
t3.start();
}
}
示例二:CyclicBarrier类
import java.util.Random;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class UserCyclicBarrier implements Runnable{
private CyclicBarrier barrier;
private String str;
public UserCyclicBarrier(CyclicBarrier barrier, String str){
this.barrier = barrier;
this.str = str;
}
public void run() {
try {
Thread.sleep(new Random().nextInt(5000));
System.out.println(str+"准备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(str+" go!");
}
public static void main(String[] args) {
CyclicBarrier barrier = new CyclicBarrier(3);
// ExecutorService executor = Executors.newFixedThreadPool(3);
// executor.submit(new Thread(new UserCyclicBarrier(barrier, “zhangsan”)));
// executor.submit(new Thread(new UserCyclicBarrier(barrier, “lisi”)));
// executor.submit(new Thread(new UserCyclicBarrier(barrier, “wangwu”)));
//
// executor.shutdown();
UserCyclicBarrier user1 = new UserCyclicBarrier(barrier, “zhangsan”);
UserCyclicBarrier user2 = new UserCyclicBarrier(barrier, “lisi”);
UserCyclicBarrier user3 = new UserCyclicBarrier(barrier, “wangwu”);
Thread t1 = new Thread(user1);
Thread t2 = new Thread(user2);
Thread t3 = new Thread(user3);
t1.start();
t2.start();
t3.start();
}
}