Java Thread: CountDownLatch 例子

public class CountDownLatchTest {
 
 @Test
 public void ThreadControllTest() throws InterruptedException{
  // Suppose we have total 10 thread waiting to execute
  final int TOTAL_THREAD_NUM = 10;
  
  // Leverage our system that only allow 5 threads are running in the same time.
  final int COUNT_LATCH = 5; 
  
  // The threads control tool that can control how many threads can runnning at same time.
  CountDownLatch countDownLatch = null;
  
  for( int i=0; i<TOTAL_THREAD_NUM; i++ ){
   Thread.sleep(1000); // give much time gap to see the running results.
   
   // initialize the CounDownLatch Object by COUNT_LATCH gaps.   
   if( i % 5 == 0 || i == 0){
    countDownLatch =  new CountDownLatch(COUNT_LATCH);
   }
   Thread thread = new MockThread(countDownLatch);
   
   thread.start();
   
  }
  
 }
 
}  

class MockThread extends Thread{
 CountDownLatch _latch;
 
 public MockThread(CountDownLatch latch){
  _latch = latch;
 }
 
 @Override
 public void run() {
  // TODO Auto-generated method stub
  try {
   System.out.println("Thread initial, waiting~~~"); 
   // waiting here and reduce 1 for the COUNT_LATCH num. 
   // Until COUNT_LATCH has reduce to 0, continue.
   _latch.countDown();
   _latch.await();
   
   System.out.println("Thread started, starting~~~"); 
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值