importjava.util.concurrent.Phaser;publicclassStarPhaserDemo{publicstaticvoidmain(Stringargs[]){Phaserphsr=newNewlinePhaser(4,3);newStarThread(phsr);newStarThread(phsr);ne...
import java.util.concurrent.Phaser;
public class StarPhaserDemo {
public static void main(String args[]) {
Phaser phsr = new NewlinePhaser(4,3);
new StarThread(phsr);
new StarThread(phsr);
new StarThread(phsr);
new StarThread(phsr);
}
}
class NewlinePhaser extends Phaser {
int numPhases;
public NewlinePhaser(int numParties, int phases) {
super(numParties);
numPhases = phases;
}
public boolean onAdvance(int phase, int numParties) {
System.out.println(); // print a newline
return phase == numPhases-1; // stop after numPhases
}
}
class StarThread implements Runnable {
Phaser phsr;
StarThread(Phaser p) {
phsr = p;
new Thread(this).start();
}
public void run() {
while (!phsr.isTerminated()) {
System.out.print('*');
phsr.arriveAndAwaitAdvance();
}
}
}
运行上面程序输出
****
****
****
修改后,不绘制矩形,而显示如下的星星三角形。像原来程序一样使用4个线程,每个线程在每个阶段最多负责绘制一个星星。
****
***
**
*
展开