Учитывая, класс с методом main, который инициализирует Phaser и создает (скажем) 3 потока для подсчета фаз на одном и том же Phaser.
public class PhaserDemo2 implements Runnable {
private static Phaser CLASS_PHASER;
private static int COUNTER;
public static void main(String[] args) {
COUNTER = 5;
// create a Phaser and register main Thread
CLASS_PHASER = new Phaser(1);
System.out.println(Integer.MIN_VALUE);
System.out.println("Phase value:" + CLASS_PHASER.getPhase() + ", Registered Parties:"
+ CLASS_PHASER.getRegisteredParties() + ", and Counter:" + COUNTER);
// create 3 Threads
new Thread(new PhaserDemo2()).start();
new Thread(new PhaserDemo2()).start();
new Thread(new PhaserDemo2()).start();
// de-register main Thread
CLASS_PHASER.arriveAndDeregister();
}
@Override
public void run() {
// register the current Thread with Phaser
CLASS_PHASER.register();
// print details
System.out.println("Phase value:" + CLASS_PHASER.getPhase() + ", Registered Parties:"
+ CLASS_PHASER.getRegisteredParties() + ", and Counter:" + COUNTER);
// wait till other Threads have printed as well
CLASS_PHASER.arriveAndAwaitAdvance();
// de-register this Thread
CLASS_PHASER.arriveAndDeregister();
}
}
Код отлично работает для большинства выполнений и производитвывод, как показано ниже,
-2147483648
Phase value:0, Registered Parties:1, and Counter:5
Phase value:0, Registered Parties:2, and Counter:5
Phase value:1, Registered Parties:2, and Counter:5
Phase value:1, Registered Parties:3, and Counter:5
-2147483648
Phase value:0, Registered Parties:1, and Counter:5
Phase value:0, Registered Parties:2, and Counter:5
Phase value:0, Registered Parties:3, and Counter:5
Phase value:0, Registered Parties:3, and Counter:5
Но для некоторых нечетных выполнений он производит вывод, подобный приведенному ниже
-2147483648
Phase value:0, Registered Parties:1, and Counter:5
Phase value:0, Registered Parties:2, and Counter:5
Phase value:0, Registered Parties:3, and Counter:5
Phase value:-2147483646, Registered Parties:0, and Counter:5
-2147483648
Phase value:0, Registered Parties:1, and Counter:5
Phase value:0, Registered Parties:2, and Counter:5
Phase value:-2147483646, Registered Parties:0, and Counter:5
Phase value:-2147483646, Registered Parties:0, and Counter:5
-2147483648
Phase value:0, Registered Parties:1, and Counter:5
Phase value:-2147483647, Registered Parties:0, and Counter:5
Phase value:-2147483647, Registered Parties:0, and Counter:5
Phase value:-2147483647, Registered Parties:0, and Counter:5
Я не уверен, может ли это быть успешно реплицировано или нет, как это происходиточень редко.В противном случае хотелось бы узнать, что является причиной неправильности. Декларация: просто новичок в Phaser