blackhole.java
来自「多线程与并发处理是程序设计好坏优劣的重要课题」· Java 代码 · 共 39 行
JAVA
39 行
public class Blackhole {
public static void enter(Object obj) {
System.out.println("Step 1");
magic(obj);
System.out.println("Step 2");
synchronized (obj) {
System.out.println("Step 3 (never reached here)"); // 不会到这里来
}
}
public static void magic(final Object obj) {
// thread会取得obj的lock,变成无穷循环的执行绪
// 将thread的名称当作Guard条件来使用
Thread thread = new Thread() { // inner class
public void run() {
synchronized (obj) { // 在此取得obj的锁定
synchronized (this) {
this.setName("Locked"); // Guard条件的变化
this.notifyAll(); // 通知已经取得obj的锁定
}
while (true) {
// 无穷循环
}
}
}
};
synchronized (thread) {
thread.setName("");
thread.start(); // 线程的启动
// Guarded Suspension模式
while (thread.getName().equals("")) {
try {
thread.wait(); // 等待新的线程取得obj的锁定
} catch (InterruptedException e) {
}
}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?