java阻塞主线程的实现

本文通过一个具体实例演示了 CountDownLatch 在 Java 多线程环境中的使用方法。示例中定义了两个 Worker 线程,它们在完成各自的任务后通知主线程,主线程则等待这两个 Worker 完成后再继续执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.声明计数器线程个数:
 
CountDownLatch latch= new CountDownLatch(2);
 
2.线程启动带参数latch:
 
Worker worker1= new Worker("zhang san" , 5000, latch);
 
3.线程启动,主线程阻塞:
 
worker1.start();
latch.await();
 
4.线程run()方法中计数器技术开始:
 
public void run(){ 
 System. out.println("Worker " +workerName +" do work begin at "+sdf.format( new Date())); 
 doWork(); //工作了 
 latch.countDown();//工人完成工作,计数器减一 
 
 
5.整体代码Test:
 
 package tets;
 
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.CountDownLatch;
 
public class CountDownLatchTest {
      
          final static SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" ); 
          public static void main(String[] args) throws InterruptedException { 
              CountDownLatch latch= new CountDownLatch(2);//两个工人的协作 
              Worker worker1= new Worker("zhang san" , 5000, latch); 
              Worker worker2= new Worker("li si" , 8000, latch); 
              worker1.start(); // 
              worker2.start(); // 
              latch.await(); //等待所有工人完成工作 
              System. out.println("all work done at " +sdf.format(new Date())+" "+Thread.currentThread().getName()); 
          } 
           
           
          static class Worker extends Thread{ 
              String workerName;  
               int workTime 
              CountDownLatch latch
              public Worker(String workerName ,int workTime ,CountDownLatch latch){ 
                   this.workerName =workerName; 
                   this.workTime =workTime; 
                   this.latch =latch; 
              } 
              public void run(){ 
                  System. out.println("Worker " +workerName +" do work begin at "+sdf.format( new Date())); 
                  doWork(); //工作了 
                  System. out.println("Worker " +workerName +" do work complete at "+sdf.format( new Date())); 
                   latch.countDown();//工人完成工作,计数器减一 
       
              } 
               
              private void doWork(){ 
                  try 
                      Thread. sleep(workTime); 
                  } catch (InterruptedException e) { 
                      e.printStackTrace(); 
                  } 
              } 
          } 
           
            
      } 
  

转载于:https://www.cnblogs.com/beantestng/p/3772845.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值