import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CountDownLatch; import java.util.concurrent.CyclicBarrier; public class Barrier { static boolean running = true; static int threads = 10; static int[] ints = new int[threads]; static class Task2 implements Runnable { CyclicBarrier cbStart; CyclicBarrier cbdone; CountDownLatch cdl; int idx; Task2(CyclicBarrier cb, CyclicBarrier cb2, CountDownLatch cdl, int index) { this.cdl = cdl; this.cbStart = cb; this.cbdone = cb2; idx=index; } @Override public void run() { int j = 0; while (running) { try { cbStart.await(); // Arbeid int var = 0; for (int i = 0; i < 250; i++) { var++; Thread.sleep(1); } // Legge inn denne iterasjonens tall ints[idx] = ((idx+1)*1000)*j; j++; cbdone.await(); } catch (InterruptedException | BrokenBarrierException e) { e.printStackTrace(); } } cdl.countDown(); } } public static void main(String[] args) throws InterruptedException, BrokenBarrierException { CyclicBarrier cbStart = new CyclicBarrier(threads+1); CyclicBarrier cbdone = new CyclicBarrier(threads + 1); CountDownLatch cdl = new CountDownLatch(threads); Thread[] ths = new Thread[threads]; for (int i = 0; i < threads; i++) { Task2 t = new Task2(cbStart, cbdone, cdl, i); ths[i] = new Thread(t); ths[i].start(); } for (int i = 0; i < 10; i++) { cbStart.await(); System.out.println("Starter: "+(i+1)); if (i == 9) running = false; cbdone.await(); System.out.println("Ferdig: " + (i + 1)); // Komma kommer en gang for mye her for (int j : ints) { System.out.print(j+", "); } System.out.println(); } cdl.await(); // Denne gjør det samme som cdl // for (Thread thread : ths) { // thread.join(); // } System.out.println("Alle er ferdige"); } }