黑马程序员技术交流社区

标题: Sleep(),suspend()和wait()之间的差异是什么? [打印本页]

作者: 吴凯    时间: 2013-4-29 22:26
标题: Sleep(),suspend()和wait()之间的差异是什么?
本帖最后由 吴凯 于 2013-5-1 01:36 编辑

如题 求解.....................
作者: 韩冬    时间: 2013-4-29 22:33
Thread.sleep()方法发送到“NotRunnable的”当前线程的一些时间。
线程保持的显示器有aquired的 - 也就是说,如果该线程是目前在synchronized块或方法没有其他线程可以进入此块或方法。
如果另一个线程调用t.interrupt(),它会唤醒沉睡的线程。
请注意,睡眠是一个静态方法,这意味着它总是影响当前线程(一个正在执行的睡眠方法)。
一个常见的错误是来调用t.sleep(),其中t是一个不同的线程,即使在当时,它是当前线程会睡,而不是在T线程。  t.suspend()已过时。
使用它可以停止当前线程以外的线程。
暂停的线程保持其所有的显示器,因为这种状态是不中断的僵局容易。  object.wait()发送到当前线程“的Runnable”状态,如睡眠(),但与一捻。
被称为等待一个对象,而不是一个线程调用此对象的“锁定对象。” 当前线程lock.wait()被调用之前,必须同步锁定对象上等待(),然后释放该锁,并增加了线程与锁相关的“等待名单”。
后来,另一个线程可以在同一锁对象和调用lock.notify()同步。
这唤醒原来,等待线程。
基本上,等待()/通知(),如睡眠是()/打断(),唯一的活动线程的睡眠线程,并不需要一个直接指针,但只共享的锁对象。






不知道能不能帮到你.
作者: 极限冰风    时间: 2013-4-29 22:42
  区别一:

sleep是Thread类的方法,是线程用来 控制自身流程的,比如有一个要报时的线程,每一秒中打印出一个时间,那么我就需要在print方法前面加上一个sleep让自己每隔一秒执行一次。就像个闹钟一样。

wait是Object类的方法,用来线程间的通信,这个方法会使当前拥有该对象锁的进程等待知道其他线程调用notify方法时再醒来,不过你也可以给他指定一个时间,自动醒来。这个方法主要是用走不同线程之间的调度的。

  区别二 :

关于锁的释放 ,在这里假设大家已经知道了锁的概念及其意义。调用sleep方法不会释放锁(自己的感觉是sleep方法本来就是和锁没有关系的,因为他是一个线程用于管理自己的方法,不涉及线程通信)

调用wait方法会释放当前线程的锁(其实线程间的通信是靠对象来管理的,所有操作一个对象的线程是这个对象通过自己的wait方法来管理的,就好像这个对象是电视机,三个人是三个线程,那么电视机的遥控器就是这个锁,假如现在A拿着遥控器,电视机调用wait方法,那么A就交出自己的遥控器,由jVM虚拟机调度,遥控器该交给谁。)【我想到一个好玩的例子:如果A拿遥控器的期间,他可以用自己的sleep每隔十分钟调一次电视台,而在他调台休息的十分钟期间,遥控器还在他的手上~】
区别三:

使用区域  

由于wait函数的特殊意义,所以他是应该放在同步语句块中的,这样才有意义    。

           

   注意:两个方法都需要抛出异常




   个人见解:有sleep和wait的第二个区别,引起了我对Java线程机制的一个疑问,目前还没有看过JDk这方面的源码(其实看了,是木有看懂),线程的同步管理,是不是由对象在调度,如果是对象在调度,那么JDK 1.5新引入的ReentrantLock机制就比synchronized关键字更值得提倡。因为他更能反映出这么一个机制来。好多人不能理解wait和sleep的区别,我认为就是因为synchronized关键字的影响。
作者: zn123_4    时间: 2013-4-29 22:46
stop() 反对使用stop(),是因为它不安全。

sleep() 此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

suspend() 方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁

wait() 对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
作者: 黄玉昆    时间: 2013-4-30 23:33
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2