1.声明计数器线程个数: CountDownLatch latch= new CountDownLatch(2); 2.线程启动带参数latch: Worker 3.线程启动,主线程阻塞: worker1.start(); latch.await(); 4.线程run()方法中计数器技术开始: public void run(){ System. out.println("Worker 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 public static void main(String[] args) throws InterruptedException CountDownLatch latch= new CountDownLatch(2);//两个工人的协作 Worker worker1= new Worker("zhang Worker worker2= new Worker("li worker1.start(); // worker2.start(); // latch.await(); //等待所有工人完成工作 System. out.println("all } static class Worker extends Thread{ String workerName; int workTime ; CountDownLatch latch; public Worker(String workerName ,int workTime ,CountDownLatch this.workerName =workerName; this.workTime =workTime; this.latch =latch; } public void run(){ System. out.println("Worker doWork(); //工作了 System. out.println("Worker latch.countDown();//工人完成工作,计数器减一 } private void doWork(){ try { Thread. sleep(workTime); } catch (InterruptedException e) e.printStackTrace(); } } } } |
java阻塞主线程的实现