62,615
社区成员
发帖
与我相关
我的任务
分享
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 {
while (isAlive()) {
long delay = millis - now;
if (delay <= 0) {
break;
}
wait(delay);
now = System.currentTimeMillis() - base;
}
}
}
synchronized (obj) {
try {
obj.wait();
....do something...
} catch (InterruptedException e) {
e.printStackTrace();
}
}
如果这里的obj是个普通对象,如没有notify唤醒当前线程会一直等待;但如果这个obj是个线程,并且已经调了start方法开始运行了,则会当前线程会等待demo线程执行完之后自动唤醒执行;
但普通对象的wait机制和线程的wait机制有什么不一样呢?
是不是主线程调用子线程的wait方法,当子线程运行完毕之后,状态由running转换为dead,主线程会得到通知?