* @throws InterruptedException
* @throws BrokenBarrierException
*/
public void doTestWakeup() throws InterruptedException, BrokenBarrierException {
final AtomicInteger iterations = new AtomicInteger(0);
final AtomicInteger counter = new AtomicInteger(0);
final AtomicInteger queue = new AtomicInteger(0);
final CountDownLatch doneCountDownLatch = new CountDownLatch(1);
final int ENQUEUE_COUNT = 100000;
TaskRunnerFactory factory = new TaskRunnerFactory();
final TaskRunner runner = factory.createTaskRunner(new Task() {
public boolean iterate() {
if( queue.get()==0 ) {
return false;
} else {
while(queue.get()>0) {
queue.decrementAndGet();
counter.incrementAndGet();
}
iterations.incrementAndGet();
if (counter.get()==ENQUEUE_COUNT)
doneCountDownLatch.countDown();
return true;
}
}
}, "Thread Name");
long start = System.currentTimeMillis();
final int WORKER_COUNT=5;
final CyclicBarrier barrier = new CyclicBarrier(WORKER_COUNT+1);
for( int i=0; i< WORKER_COUNT; i++ ) {
new Thread() {
public void run() {
try {
barrier.await();
for( int i=0; i < ENQUEUE_COUNT/WORKER_COUNT; i++ ) {
queue.incrementAndGet();
runner.wakeup();
yield();
}
}
catch (BrokenBarrierException e) {