package performance; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.ThreadLocalRandom; import collection.Stack; public class Task extends Thread { private final Stack stack; private final double percentage; private final CyclicBarrier barrier; private int total; private long operations; public Task(Stack stack, double percentage, CyclicBarrier barrier) { super(); this.stack = stack; this.percentage = percentage; this.barrier = barrier; this.total = 0; this.operations = 0; } public void run() { this.barrier.await(); final long start = System.nanoTime(); Main.start.compareAndSet(null, start); while (true) { if (ThreadLocalRandom.current().nextDouble() < percentage) { try { this.total += this.stack.pop(); } catch (Exception e) { // do nothing } } else { int data = ThreadLocalRandom.current().nextInt(); this.stack.push(data); } this.operations++; } } public int getTotal() { return total; } public long getOperations() { return operations; } }