Javaのマルチスレッド超詳細

 

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()。
      }
    }
  }
}

おすすめ

転載: www.cnblogs.com/min225016/p/12511253.html