黑马程序员技术交流社区
标题:
多线程中wait()和sleep()方法的区别
[打印本页]
作者:
赵倩倩
时间:
2012-7-8 20:47
标题:
多线程中wait()和sleep()方法的区别
上午看到一个SUN公司的面试题 提到 wait()和sleep()方法的区别 就知道都要抛异常 对于具体的区别没有深思考 下午看了会儿书 总结了几个
wait()和sleep()的区别
区别一:sleep是Thread类的方法,是线程用来控制自身进程的执行,比如有一个要报时的线程,每一秒中打印出一个时间,那么我就需要在print方法前面加上一个sleep让自己每隔一秒执行一次。就像个闹钟一样。
wait是Object类的方法,用来线程间的通信,这个方法会使当前拥有该对象锁的进程等待知道其他线程调用notify方法时再醒来,不过你也可以给他指定一个时间,自动醒来。这个方法主要是用走不同线程之间的调度的。
区别二:、
sleep()方法不会释放锁 因为它本身不涉及到锁 而wait()方法会释放当前进程的锁,线程间的通信由对象控制,而对象就是通过调用自身的wait()方法来控制的
区别三:使用范围
wait()方法控制线程 用于同步语句块中,这样才有意义
作者:
史卜坤
时间:
2012-7-9 10:35
sleep是线程被调用时,占着cpu去睡觉,其他线程不能占用cpu,os认为该线程正在工作,不会让出系统资源,wait是进入等待池等待,让出系统资源,其他线程可以占用cpu,一般wait不会加时间限制,因为如果wait的线程运行资源不够,再出来也没用,要等待其他线程调用notifyall方法唤醒等待池中的所有线程,才会在进入就绪序列等待os分配系统资源,
sleep是静态方法,是谁掉的谁去睡觉,就算是在main线程里调用了线程b的sleep方法,实际上还是main去睡觉,想让线程b去睡觉要在b的代码中掉sleep
sleep()不是放锁,而wait()是释放的。
通俗的说,sleep()就是睡眠一段时间后自动醒来。
而wait()则是等待,直到有线程通知(notify())唤醒他才会重新工作。
就好比你睡觉,早上自然就行了,然后就去上班/上学了。
而和朋友出去玩,约好不见不散,你早到了,就会一直等,一直到你朋友来了告诉你“我来了”,然后你才会继续执行接下来的事情。
呵呵
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2