在Phaser类中,我们在每个线程中,每个线程进行完一个阶段完成后都会等待其他线程完成后再一起进行,当所
有线程都完成了一个任务的时候,会调用Phaser的onAdvance方法,如果我们想在每个阶段,所有线程都完成他们的阶
段工作后做点啥事的话,那就得继承Phaser类来重写Onadvance这个方法来实现我们的目的,下面我们用一个例子来说
明,例子就是模拟多个学生考试,考试分为三个阶段,每个阶段完成后,都会等待所有的学生完成,同时我们希望在每
一个阶段,所有的学生完成一个阶段的任务后打印出几句话,下面看代码。
package com.bird.concursey.charpet5;
import java.util.Date;
import java.util.concurrent.Phaser;
import java.util.concurrent.TimeUnit;
/**
* This class will simulate the students of the exam
*
* @author bird 2014年9月23日 下午8:01:47
*/
public class Student implements Runnable {
private Phaser phaser;
public Student(Phaser phaser) {
super();
this.phaser = phaser;
}
@Override
public void run() {
System.out.printf("%s: Has arrived to do the exam.%s\n", Thread
.currentThread().getName(), new Date());
phaser.arriveAndAwaitAdvance();
System.out.printf("%s: Is going to do the first exercise.%s\n", Thread
.currentThread().getName(), new Date());
doExercise1();
System.out.printf("%s: Has done the first exercise.%s\n", Thread
.currentThread().getName(), new Date());
phaser.arriveAndAwaitAdvance();
System.out.printf("%s: Is going to do the second exercise.%s\n", Thread
.currentThread