1. 程式人生 > >用柵欄(CyclicBarrier)實現高併發測試

用柵欄(CyclicBarrier)實現高併發測試

public class TestCyclic {
    @Test
    public void test01() {
        int count = 10000;//併發執行緒數
        CyclicBarrier cyclicBarrier = new CyclicBarrier(count);
        ExecutorService executorService = Executors.newFixedThreadPool(count);
        int n = 0;
        for (int i = 0; i < count; i++) {

            executorService.execute(new
TestCyclic().new Task(cyclicBarrier, n)); n++; } executorService.shutdown(); // 關閉執行緒池 // 判斷是否所有的執行緒已經執行完 while (!executorService.isTerminated()) { try { // 所有執行緒池中的執行緒執行完畢,執行後續操作 // TODO System.out.println("==============is sleep============"
); Thread.sleep(10000); System.out.println("==============is wake============"); } catch (InterruptedException e) { e.printStackTrace(); } } } public class Task implements Runnable { private CyclicBarrier cyclicBarrier; int
n = 0; public Task(CyclicBarrier cyclicBarrier, int n) { this.cyclicBarrier = cyclicBarrier; this.n = n; } @Override public void run() { try { // 等待所有任務準備就緒 System.out.println("賽馬" + n + "到達柵欄前"); cyclicBarrier.await(); System.out.println("賽馬" + n + "開始跑"); // 測試內容 System.out.println("hello: " + n); } catch (Exception e) { e.printStackTrace(); } } } }