按序打印

给你一个类:

public class Foo {
  public void first() { print("first"); }
  public void second() { print("second"); }
  public void third() { print("third"); }
}
三个不同的线程 A、B、C 将会共用一个 Foo 实例。

线程 A 将会调用 first() 方法
线程 B 将会调用 second() 方法
线程 C 将会调用 third() 方法
请设计修改程序,以确保 second() 方法在 first() 方法之后被执行,third() 方法在 second() 方法之后被执行。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/print-in-order
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Foo {

    //多线程时间状态值
    private AtomicInteger firstTime = new AtomicInteger(0);
    private AtomicInteger secondTime = new AtomicInteger(0);

    public Foo() {
        
    }

    public void first(Runnable printFirst) throws InterruptedException {
    
        printFirst.run();
        //以原子性将当前值递增1
        firstTime.incrementAndGet();
    }

    public void second(Runnable printSecond) throws InterruptedException {
        //判断frist线程是否执行完毕
        while(firstTime.get()!=1){

        }
        printSecond.run();
        secondTime.incrementAndGet();
    }

    public void third(Runnable printThird) throws InterruptedException {
        
        while(secondTime.get()!=1){

        }
        printThird.run();
    }
}
posted @ 2023-05-19 23:43  网抑云黑胶SVIP用户  阅读(9)  评论(0编辑  收藏  举报