共计 1110 个字符,预计需要花费 3 分钟才能阅读完成。
题目
咱们提供了一个类: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();}
}
这里应用了信号量,在以后线程体中持有其它线程体所依赖的信息量,本人的工作执行实现之后再增加一个许可,只有拿到许可的线程体能力执行,这样就保障了线程间的程序。
正文完