Java中的sleep()和wait()函数都可以挂起当前线程,使线程休眠,但实现方式不一样,如下:
1.首先sleep()是Thread类的方法静态方法,需要通过Thread类调用,Thread.sleep()。而wait()和notify()是Object类中的实例方法,因为java所有类都继承于object类,所有类中都可以使用。
2.wait(),和notify()必须用在synchronized代码块中调用,否则会抛出异常(因为wait()需要释放对象锁,如果不在synchronized代码块中不能保证拥有对象锁)。
3.当在synchronized代码块中使用sleep(),线程会被挂起,但不会释放对象锁,所以如果有其他线程等待执行该synchronized代码块,一直会被阻塞,等待该线程被唤醒释放对象锁。
4.当在synchronized代码块中使用wait(),线程会被挂起,需要notify()唤醒,但该线程会释放对象锁,所以其他线程可以执行该synchronized代码块。
关于synchronized用法这篇文章讲得很好,很简洁http://blog.youkuaiyun.com/a999wt/article/details/10664813
本文详细解析了Java中的sleep()和wait()函数的区别与应用,包括调用方式、作用范围、同步机制等关键特性。着重指出sleep()与wait()在使用场景上的差异,特别是它们对对象锁的影响,帮助开发者更准确地掌握线程控制技术。
1067

被折叠的 条评论
为什么被折叠?



