本帖最后由 、zhi 于 2013-5-26 15:50 编辑
这两个方法,说得简单点就是,当一个线程调用sleep()方法的时候,线程本身会根据sleep()方法里设定的时间停止一下,其它的一切都不变,仅仅是自身停止了,对象锁,和线程所占有的资源都不会被释放,其它想要运行的互斥线程还是得等这个线程运行完成才能运行。
当一个线程调用wait()方法的时候,线程就不但是不继续执行了,线程所占有的资源都会被释放,其它想要运行的互斥线程就可以抢夺这个线程所释放的资源来运行。而且这个wait()是没有参数的,得收到其它线程的notify()方法的时候,才能拥有争夺资源的机会,还不是马上运行。
举例子就是:3个人占用一台电脑,当正在占用电脑的人调用sleep()的时候,他就是在电脑桌(相当于锁)上睡觉,其它人还是得等他睡醒,而且他睡醒后还是继续占用电脑,直到他不想用为止,其它两个人才能去争夺这台电脑。而正在占用电脑的人调用wait()的时候,他就是离开电脑桌(相当于锁)了,其它两个人就可以争夺这台电脑了,当一个人用完电脑后调用notify()方法的时候,调用了wait()方法的人就可以和另外一个人一起争夺这台电脑的使用权了。但是不是马上就能用,抢不到就用不了。
什么时候用呢?slepp()可以让一个线程停止,运用范围比较广,但是小弟还没用过。wait()就比较常用了,可以用来控制线程的运行,建议看看张孝祥老师关于线程的视频教程。张孝祥多线程:http://edu.csdn.net/news/2012822/972a237433aa.shtml |