You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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;
}
}
}
Activity
DaveBoy commentedon Aug 8, 2019
wait:资源不持有,object方法
sleep:资源持有,线程方法
Qiang11 commentedon Aug 8, 2019
wait: 释放锁
sleep: 没有释放锁
qq245425070 commentedon Aug 8, 2019
sleep 是Thread类的方法,wait是Object类的方法
sleep不释放锁,wait释放锁
sleep不需要Synchronized ,wait需要Synchronized
sleep不需要唤醒,wait需要唤醒(除wait(int time))
gabyallen commentedon Aug 8, 2019
wait()的线程状态能够被notify,notufyall唤醒,而sleep()的线程状态不能被唤醒。
wait()进入等待期会释放锁,sleep()不会释放锁
wait只能在同步(synchronize)环境中被调用,而sleep不需要
sunzhibindev commentedon Aug 8, 2019
sleep()和wait() CPU时间片都会释放
notify() 只唤醒一个等待(对象的)线程并使该线程开始执行
notifyAll() 会唤醒所有等待(对象的)线程,尽管哪一个线程将会第一个处理取决于操作系统的实现
fogcoding commentedon Aug 8, 2019
sleep 也是可以被唤醒的,通过interupt方法,但是会抛出一个打断异常,只要捕获它,程序依然能够继续执行。
https://www.cnblogs.com/thinfog/p/11250913.html
这是我对于线程状态的研究,如有错误,请大家指教。
18361237136 commentedon Aug 13, 2019
sleep是Thread里面的方法,wait是Object里面的方法
sleep不释放锁,wait释放锁
sleep不能被唤醒,wait可以被唤醒
sleep不需要synchronize,wait需要
Czy0201 commentedon Aug 14, 2019
sleep 是Thread的 wait是Object的
sleep 不释放锁 wait释放锁(wait需要notify或者notifyall来唤醒,只能在synchronize里面用)
Alex-Cin commentedon Aug 29, 2019
我想提另外一个问题, thread.yield 和 thread.join
suagger commentedon Nov 11, 2019
wait是Object中的方法,sleep是Thread中的方法
wait会释放锁,sleep不释放锁
wait只能在synchronize中使用,需要notify或者notifyall来唤醒;sleep不需要被唤醒
sleep也可以被唤醒,使用interupt方法,但是需要捕获异常
syx103 commentedon Nov 11, 2019
1.sleep是Thread的静态方法,所以通过对象名.sleep()调用并不会使得该对象线程进入休眠,而是当前线程进入休眠,wait()是Object类中的方法,因为锁对象是任意的,而Object类是所有类的基类。
2.sleep()调用之后不释放锁,wait()方法调用之后释放锁。
3.sleep()方法必须要传入参数,而wait()方法可以传入也可以不传入参数,参数即为时间。
4.sleep()方法可以用在任何地方,wait()方法只能用在同步方法或者同步代码块中。因为wait(),notify(),notifyAll()都是对锁对象所在的线程进行操作,必须先要有锁对象。
5.sleep()方法不需要唤醒,在一定时间后(即参数),该线程会自动醒来,wait()必须由notify()或者notifyAll()来唤醒
chunlinchulv commentedon Nov 11, 2019
https://blog.csdn.net/weixin_44618862/article/details/103017183
midFang commentedon May 25, 2021
我想问一个问题,wait() 之后一定要 notify 之后才能唤醒嘛 ?
运行结果是这样的,这里并没有 notify ,wait 之后的代码也运行了,这是为什么 ?
fogcoding commentedon May 31, 2021
你这里,是等待2秒,并不是永远等待