[英]How i can print thread status?
任务:顺序覆盖子流的状态并打印到控制台(可能通过一个中间状态): BLOCKED WAITING TERMINATED 方法 Thread.sleep() 不使用。
我的代码:
public class Test {
private static final Object M = new Object();
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread() {
public void run() {
synchronized(M) {
try {
M.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
t.start();
synchronized(M) {
System.out.println(t.getState());
M.notify();
M.notifyAll();
}
System.out.println(t.getState());
System.out.println(t.getState());
t.join();
synchronized(M) {
M.notify();
M.notifyAll();
System.out.println(t.getState());
}
}
}
结果:
问题:请帮助如何让它出现在给定的序列中:BLOCKED WAITING TERMINATED
这是解决方案:
public class Test {
private static final Object M = new Object();
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread() {
public void run() {
try {
synchronized(M) {
M.notifyAll(); // notify before you stay on wait
M.wait();
M.notifyAll();
M.wait();
M.notifyAll();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
synchronized(M) { // you need to lock M before start thread
t.start();
M.wait(); //wait and notifyAll need for make sure before thread t already get lock M and will blocked next time
M.notifyAll();
System.out.println(t.getState()); //BLOCKED
M.wait();
System.out.println(t.getState()); //WAITING
M.notifyAll();
}
t.join();
synchronized(M) {
M.notifyAll();
System.out.println(t.getState());
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.