https://blog.csdn.net/weixin_44797490/article/details/91006241
輸入はjava.util.ArrayList;
輸入はjava.util.List;
輸入java.util.concurrent.CountDownLatch;
輸入java.util.concurrent.ExecutorService;
輸入java.util.concurrent.Executors。
パブリッククラスMultiThreadTest {
公共の静的な無効メイン(文字列[]引数)がスロー例外{
一覧<整数> idList =新規のArrayList <>();
以下のために(INT I = 0; I <1000; I ++){
idList.add(I)。
}
INT threadNum = 10。
ExecutorServiceのExecutorServiceの= Executors.newFixedThreadPool(threadNum)。
たCountDownLatchたCountDownLatch =新たCountDownLatch(threadNum)。
INT perSize = idList.size()/ threadNum。
{(; I <threadNum I ++ INTがI = 0)するため
マルチスレッドスレッド=新しいマルチスレッド();
thread.setIdList(idList.subList(I * perSize、(I + 1)* perSize))。
thread.setCountDownLatch(たCountDownLatch)。
executorService.submit(スレッド)。
}
countDownLatch.await()。
executorService.shutdown();
}
}
クラスマルチスレッドは、スレッド{延び
プライベートリスト<整数> idListと、
プライベートたCountDownLatchたCountDownLatch。
公共ボイドsetIdList(一覧<整数> idList){
this.idList = idList。
}
公共ボイドsetCountDownLatch(たCountDownLatchたCountDownLatch){
this.countDownLatch =たCountDownLatch。
}
@Override
公共ボイドラン(){
{試す
のThread.sleep(1000);
System.out.println(this.idList)。
}キャッチ(例外e){
e.printStackTrace();
}最後に{
IF(!たCountDownLatch = NULL){
countDownLatch.countDown()。
}
}
}
}