1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
| package com.holelin.sundry.test.thread;
import cn.hutool.core.thread.ThreadUtil; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.Test;
public class CyclicBarrierTest {
public static void main(String[] args) { CyclicBarrier cyclicBarrier = new CyclicBarrier(3, new AssembleComputerWorkshop()); final ExecutorService executorService = Executors.newCachedThreadPool(); executorService.execute(new CpuWorkshop(cyclicBarrier)); executorService.execute(new MainboardWorkshop(cyclicBarrier)); executorService.execute(new MemoryWorkshop(cyclicBarrier)); } }
interface Producible {
void produce(); }
class CpuWorkshop implements Runnable, Producible {
private CyclicBarrier cyclicBarrier;
public CpuWorkshop(CyclicBarrier cyclicBarrier) { this.cyclicBarrier = cyclicBarrier; }
@Override public void run() { while (true) { try { System.out.println("start produce CPU"); ThreadUtil.sleep(2, TimeUnit.SECONDS); produce(); this.cyclicBarrier.await(); } catch (InterruptedException | BrokenBarrierException e) { throw new RuntimeException(e); } } }
@Override public void produce() { System.out.println("produce CPU"); } }
class MainboardWorkshop implements Runnable, Producible {
private CyclicBarrier cyclicBarrier;
public MainboardWorkshop(CyclicBarrier cyclicBarrier) { this.cyclicBarrier = cyclicBarrier; }
@Override public void produce() { System.out.println("produce Main board");
}
@Override public void run() { while (true) { try { System.out.println("start produce Main board"); ThreadUtil.sleep(2, TimeUnit.SECONDS); produce(); this.cyclicBarrier.await(); } catch (InterruptedException | BrokenBarrierException e) { throw new RuntimeException(e); } } } }
class MemoryWorkshop implements Runnable, Producible {
private CyclicBarrier cyclicBarrier;
public MemoryWorkshop(CyclicBarrier cyclicBarrier) { this.cyclicBarrier = cyclicBarrier; }
@Override public void produce() { System.out.println("produce memory");
}
@Override public void run() { while (true) { try { System.out.println("start produce memory"); ThreadUtil.sleep(2, TimeUnit.SECONDS); produce(); this.cyclicBarrier.await(); } catch (InterruptedException | BrokenBarrierException e) { throw new RuntimeException(e); } } } }
class AssembleComputerWorkshop implements Runnable {
@Override public void run() { System.out.println("start Assemble Computer"); ThreadUtil.sleep(2, TimeUnit.SECONDS);
} }
|