我刚刚在 java 线程中发现了奇怪的行为。 这是一个代码示例:
class Job extends Thread {
private Integer number = 0;
public void run() {
for (int i = 1; i < 1000000; i++) {
number++;
}
}
public Integer getNumber() {
return number;
}
}
public class Test {
public static void main(String[] args)
throws InterruptedException {
Job thread = new Job();
thread.start();
synchronized (thread) {
thread.wait();
}
System.out.println(thread.getNumber());
}
}
没想到会打印出999999。 似乎在 start() 方法逻辑末尾有 notify() 调用。 有什么想法吗?
最佳答案
Seems like there is notify() call at the end of start() method logic.
是的,这是真的。当线程完成时,它会执行一个 notify()
,这就是 Thread.join()
的工作原理。以下是 Thread.join()
的 Java1.6 代码示例:
public final synchronized void join(long millis) throws InterruptedException {
long base = System.currentTimeMillis();
long now = 0;
if (millis < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (millis == 0) {
while (isAlive()) {
wait(0);
}
} else {
...
也就是说,这可能取决于实现,不应依赖。
关于java - 看来Thread.start()做了一个notify(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14592008/