要求:实现三个线程,A线程执行完成后B线程执行,B线程执行完成后C线程执行
PS:个人娱乐,欢迎讨论,欢迎斧正
/*** @author: lizheng* @create: 2020-08-03*/
public class ThreadTest {public static void main(String[] args) {Foo foo = new Foo();CountDownLatch countDownLatchFirst = new CountDownLatch(1);CountDownLatch countDownLatchSecond= new CountDownLatch(1);FirstThread firstThread = new FirstThread(foo,null, countDownLatchFirst);SecondThread secondThread = new SecondThread(foo, countDownLatchFirst, countDownLatchSecond);ThreeThread threeThread = new ThreeThread(foo, countDownLatchSecond, null);threeThread.start();secondThread.start();firstThread.start();}
}class FirstThread extends MyThread{public FirstThread(Foo foo, CountDownLatch preCountDownLatch, CountDownLatch processCountDownLatch) {super(foo, preCountDownLatch, processCountDownLatch);}void doSomething() {foo.one();}
}class SecondThread extends MyThread{public SecondThread(Foo foo, CountDownLatch preCountDownLatch, CountDownLatch processCountDownLatch) {super(foo, preCountDownLatch, processCountDownLatch);}void doSomething() {foo.two();}
}class ThreeThread extends MyThread{public ThreeThread(Foo foo, CountDownLatch preCountDownLatch, CountDownLatch processCountDownLatch) {super(foo, preCountDownLatch, processCountDownLatch);}void doSomething() {foo.three();}
}abstract class MyThread extends Thread{protected Foo foo;protected CountDownLatch preCountDownLatch;private CountDownLatch processCountDownLatch;public MyThread(Foo foo, CountDownLatch preCountDownLatch, CountDownLatch processCountDownLatch) {this.foo = foo;this.preCountDownLatch = preCountDownLatch;this.processCountDownLatch = processCountDownLatch;}public void run() {if (preCountDownLatch != null) {try {preCountDownLatch.await();} catch (InterruptedException e) {e.printStackTrace();}}doSomething();if (processCountDownLatch != null) {processCountDownLatch.countDown();}}abstract void doSomething();
}class Foo {public void one() {System.out.println("one");}public void two() {System.out.println("two");}public void three() {System.out.println("three");}
}