乐趣区

关于java:多线程按序打印

题目
 咱们提供了一个类: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();}
}

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

退出移动版