【发布时间】:2016-04-09 18:23:23
【问题描述】:
我有跑步课。很简单,只需打印、休眠然后打印;
public class Run implements Runnable {
@Override
public void run() {
System.out.println("START RUN");
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("FINISH RUN");
}
}
好的,现在我正在编写测试;
public static synchronized void main(String[] args) throws InterruptedException {
Run r = new Run();
Thread t = new Thread(r, "TEST");
t.start();
// EXECYTE THE CODE WHULE THREAD "TEST" IS RUNNABLE
synchronized (t) {
System.out.println(t.getState());
t.wait();
}
System.out.println("Y");
// SLEEP THREAD "TEST" TO BE EXECUTED DURING THE TIME
Thread.sleep(100);
synchronized (t) {
System.out.println(t.getState());
t.wait();
}
System.out.println("Y2");
}
问题 1: 当线程“TEST”正在执行时,我尝试等待()。 此时线程状态为“RUNNABLE”。由于这种状态,它确实不等待,我不明白为什么?如果状态为“TERMINATED”或“NEW”,wait() 有效;如果我删除 t.start(),线程状态将是“新”,所以等待也有效。你能告诉我会发生什么吗?
输出:
START RUN
RUNNABLE
FINISH RUN
Y
TERMINATED`
【问题讨论】:
-
快速提问:你认为
t.wait()在做什么? -
这仅显示线程启动时的状态。
Thread.sleep不锁定任何东西。 -
使当前线程等待,直到另一个线程调用 notify 或 notifyAll。当 t.wait() 被执行时,首先,线程处于休眠状态,因此它不会等待。但是在线程将被执行后它被挂起
标签: java multithreading