用柵欄(CyclicBarrier)實現高併發測試
阿新 • • 發佈:2019-01-03
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();
}
}
}
}