|
Groovy example source code file (threadring.groovy)
The Groovy threadring.groovy source code/** * The Computer Language Benchmarks Game * http://shootout.alioth.debian.org/ * contributed by Klaus Friedel * converted to Groovy by Danno Ferrin */ import java.util.concurrent.locks.LockSupport; public static class MessageThread extends Thread { MessageThread nextThread; volatile Integer message; public MessageThread(MessageThread nextThread, int name) { super(""+name); this.nextThread = nextThread; } public void run() { while(true) nextThread.enqueue(dequeue()); } public void enqueue(Integer hopsRemaining) { if(hopsRemaining == 0){ System.out.println(getName()); System.exit(0); } // as only one message populates the ring, it's impossible // that queue is not empty message = hopsRemaining - 1; LockSupport.unpark(this); // work waiting... } private Integer dequeue(){ while(message == null){ LockSupport.park(); } Integer msg = message; message = null; return msg; } } int THREAD_COUNT = 503; int hopCount = Integer.parseInt(args[0]); MessageThread first = null; MessageThread last = null; for (int i = THREAD_COUNT; i >= 1 ; i--) { first = new MessageThread(first, i); if(i == THREAD_COUNT) last = first; } // close the ring: last.nextThread = first; // start all Threads MessageThread t = first; t.start(); t = t.nextThread; while(t != first) { t.start(); t = t.nextThread; } // inject message first.enqueue(hopCount); first.join(); // wait for System.exit Other Groovy examples (source code examples)Here is a short list of links related to this Groovy threadring.groovy source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.