赞
踩
主要有两种方法:
public class Main{ public static void main(String[] args) { Thread t1 = new Thread(new Task(null)); Thread t2 = new Thread(new Task(t1)); Thread t3 = new Thread(new Task(t2)); t1.start(); t2.start(); t3.start(); } static class Task implements Runnable { private Thread preThread; public Task(Thread preThread) { this.preThread = preThread; } public void run() { if (preThread != null) { try { preThread.join(); System.out.println("thread start:" + Thread.currentThread().getName()); } catch (InterruptedException e) { e.printStackTrace(); } } else { System.out.println("thread start:" + Thread.currentThread().getName()); } } } }
public class Main02{ public static void main(String[] args) { CountDownLatch countDownLatch1 = new CountDownLatch(0);// 在这里count为0,表示该线程立马开始执行 CountDownLatch countDownLatch2 = new CountDownLatch(1);// 在这里count为1,表示等待上一线程执行完,也就是要等countDownLatch2减去1为0时 CountDownLatch countDownLatch3 = new CountDownLatch(1);// 在这里count为1,表示等待上一线程执行完 Thread t1 = new Thread(new Count(countDownLatch1,countDownLatch2)); Thread t2 = new Thread(new Count(countDownLatch2, countDownLatch3)); Thread t3 = new Thread(new Count(countDownLatch3, countDownLatch3)); } static class Count implements Runnable { CountDownLatch countDownLatch1; CountDownLatch countDownLatch2; /** * @param countDownLatch1 上一个线程的计数器 * @param countDownLatch2 当前线程的计数器 */ public Count(CountDownLatch countDownLatch1, CountDownLatch countDownLatch2) { super(); this.countDownLatch1 = countDownLatch1; this.countDownLatch2 = countDownLatch2; } @Override public void run() { try { countDownLatch1.await();//线程t1进来的时候,因为count=0,所以不用等直接运行 System.out.println("thread start:" + Thread.currentThread().getName()); Thread.sleep(1000); countDownLatch2.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。