题目
咱们提供了一个类:public class Foo {  public void first() { print("first"); }  public void second() { print("second"); }  public void third() { print("third"); }}三个不同的线程将会共用一个 Foo 实例。    线程 A 将会调用 first() 办法    线程 B 将会调用 second() 办法    线程 C 将会调用 third() 办法请设计批改程序,以确保 second() 办法在 first() 办法之后被执行,third() 办法在 second() 办法之后被执行。起源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/print-in-order著作权归领扣网络所有。商业转载请分割官网受权,非商业转载请注明出处。
解题

应用JUC工目包里的Semaphore类

public class Foo{    public void first() { System.out.println("first"); }    public void second() { System.out.println("second"); }    public void third() { System.out.println("third"); }    public static void main(String[] args){        Semaphore sepmaphor1 = new Semaphore(0);        Semaphore sepmaphor2 = new Semaphore(0);        Semaphore sepmaphor3 = new Semaphore(0);        Foo foo = new Foo();        new Thread(() -> {            foo.first();            sepmaphor1.release();        }).start();        new Thread(() -> {            try {                sepmaphor1.acquire();            } catch (InterruptedException e) {                e.printStackTrace();            }            foo.second();            sepmaphor2.release();        }).start();        new Thread(() -> {            try {                sepmaphor2.acquire();            } catch (InterruptedException e) {                e.printStackTrace();            }            foo.third();            sepmaphor3.release();        }).start();    }}

这里应用了信号量,在以后线程体中持有其它线程体所依赖的信息量,本人的工作执行实现之后再增加一个许可,只有拿到许可的线程体能力执行,这样就保障了线程间的程序。