thread-ring Java #7 program
source code
/**
* The Computer Language Benchmarks Game
* http://benchmarksgame.alioth.debian.org/
* contributed by Klaus Friedel
* modified by Daryl Griffith
*/
import java.util.concurrent.locks.LockSupport;
public class threadring extends Thread {
static final int THREAD_COUNT = 503;
threadring nextThread;
volatile boolean waiting = true;
int message;
public threadring(int name) {
super(Integer.toString(name));
}
@Override
public void run() {
for (;;) {
while (waiting) {
LockSupport.park();
}
if (message == 0) {
System.out.println(getName());
System.exit(0);
}
waiting = true;
nextThread.message = message - 1;
nextThread.waiting = false;
LockSupport.unpark(nextThread);
}
}
public static void main(String args[]) throws Exception {
threadring first = new threadring(1);
threadring current = new threadring(2);
first.start(); // Thread 1
first.nextThread = current;
first.message = Integer.parseInt(args[0]);
first.waiting = false;
for (int i = 3; i < THREAD_COUNT; i++) {
current.nextThread = new threadring(i);
current.start();
current = current.nextThread;
}
current.nextThread = new threadring(THREAD_COUNT);
current.start(); // Thread 502
current = current.nextThread;
current.nextThread = first;
current.start(); // Thread 503
}
}
notes, command-line, and program output
NOTES:
64-bit Ubuntu quad core
java 10 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10+46)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+46, mixed mode)
Wed, 21 Mar 2018 18:40:34 GMT
MAKE:
mv threadring.java-7.java threadring.java
/opt/src/jdk-10/bin/javac -d . threadring.java
1.07s to complete and log all make actions
COMMAND LINE:
/opt/src/jdk-10/bin/java threadring 50000000
PROGRAM OUTPUT:
292