CountDownLatch 部分加载和同时并发业务。
按顺序部分加载:
import java.util.concurrent.CountDownLatch; /** * @Title: ThreadCountDownTest.java * @Description: * @author: wuwenjie * @date: 2019.07.17 16:43 * */ public class ThreadCountDownTest { public static void main(String[] args) { // 初始化闭锁,并设置资源个数 CountDownLatch latch = new CountDownLatch(2); Thread t1 =new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(1000);
//加载1 latch.countDown(); System.out.println(111); } catch (InterruptedException e) { e.printStackTrace(); } } });
Thread t2 = new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(12000);
//加载2 latch.countDown(); System.out.println(222); } catch (InterruptedException e) { e.printStackTrace(); } } }); Thread t3 = new Thread(new Runnable() { @Override public void run() { try {
latch.await();
//加载完成业务使用 System.out.println(333); } catch (InterruptedException e) { e.printStackTrace(); } } }); t1.start(); t2.start(); t3.start(); } }
2.同时业务并发处
import java.util.concurrent.CountDownLatch; public class ThreadCountDownTest { public static void main(String[] args) { // 初始化闭锁,并设置资源个数 CountDownLatch latch = new CountDownLatch(2); Thread t1 =new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(1000); latch.countDown();
//等待所有执行完,并发 latch.await();
System.out.println(111); } catch (InterruptedException e) { e.printStackTrace(); } } }); Thread t2 = new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(12000); latch.countDown(); latch.await(); System.out.println(222); } catch (InterruptedException e) { e.printStackTrace(); } } }); Thread t3 = new Thread(new Runnable() { @Override public void run() { try { latch.await(); System.out.println(333); } catch (InterruptedException e) { e.printStackTrace(); } } }); t1.start(); t2.start(); t3.start(); } }