• java阻塞主线程的实现


    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(); 
                      } 
                  } 
              } 
               
                
          } 
      
  • 相关阅读:
    Eclipse对printf()不能输出到控制台的解决方法
    Eclipse launch failed.Binary not found解决方案
    Windows 7中使用Eclipse 使用CDT and WinGW 开发C/C++(转载)
    assets
    方法对头,报表模板维护其实很简单
    刷机包各个文件都是啥
    开机logo切换逻辑深入研究
    不同分辨率的LCM进行兼容
    SD卡驱动分析(二)
    SD卡驱动分析(一)
  • 原文地址:https://www.cnblogs.com/beantestng/p/3772845.html
Copyright © 2020-2023  润新知