在多线程中为什么要使用sleep()、 wait()、 notify()等函数? 在多线程中为什么要使用sleep()、 wait()、 notify()等函数?有何作用?不使用行不?同步不是使用synchronized()函数就可以了吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 sleep()使线程睡过去,也就是暂停执行,wait()是线程等待事件的发生,如果你的线程需要某个条件才能继续运行,就用wait(),他不占资源,notify()通知相应的在等待的线程条件已经满足,可以启动了,采用wait()的线程只能够通过notify或者是notifyAll()启动,不能够自己启动的. http://blog.csdn.net/treeroot/archive/2004/11/10/175508.aspxhttp://blog.csdn.net/treeroot/archive/2004/11/11/176976.aspx sleep()、 wait()、 notify()与synchronized()没有多大关系 当你synchronize 锁住一个对象的时候,在莫些时候你想要等待某个条件成立再执行你的代码,比如, 你从缓冲区中取数据,但是如果缓冲区中还没有数据呢?这个时候,你就要用wait,释放这个对象的锁(如果不释放,其他线程也没有办法往缓冲区中写)。等到其他线程写过缓冲后,调用notify通知你。 synchronized(buffer) { while (isEmpty(buffer)) wait(); ... } 回复人: batfree(Batfree)sleep()使线程睡过去,也就是暂停执行,或者让出cpu给别的线程使用..wait()是线程等待事件的发生,如果你的线程需要某个条件才能继续运行,就用wait(),他不占资源,只是不运行线程而已 等待命令的意思notify()通知相应的在等待的线程条件已经满足,可以启动了,采用wait()的线程只能够通过notify或者是notifyAll()启动,不能够自己启动的.synchronized()函数,与wait() notify()等没有关系,他就像数据库中的防止死锁一样的一个函数http://www.kupage.com/webdesign/8/20040329/1720170000027tkg9w74.htm这里比较详细 建议搂主看看!!! http://blog.csdn.net/treeroot/archive/2004/11/10/175508.aspxhttp://blog.csdn.net/treeroot/archive/2004/11/11/176976.aspx JAVA采用了Monitor线程模型synchronized解决同步问题,也就是共享资源/数据一次只能让一个线程使用,其它的等着wait/notify是为了解决生产者消费者的问题,但是也是共享资源的问题(共享库存数据),消费者减库存,生产者加库存,所以使用wait/notify首先要在synchronized区(也就是要先获得对象锁),但是不同的是,synchronized不会和共享资源/数据有关,它只保证一次只能让一个线程使用就行了,但是生产者消费者的同步问题还和共享资源/数据有关,如果消费者线程一看没有库存了就要Wait生产者加库存,生产者在加了库存后notify消费者(wait调用后会释放对象锁,为什么可以释放对象锁,因为它不会运行代码了,不会竞争资源/数据,让其它消费者也能进来等候,当它的线程被notify返回时,它将重新获得对象锁,就象它wait前的状态一样) java初学者问个关于线程的问题,望高手来解答。 文件的操作程序 is it look good? 一个我没见过的接口定义 求一个推算时间的算法 如何写一个函数,判断一个圆和四边形是否相交? 怎么设置SWT中Dialog窗口标题 ————————求助,关于字符集—————————up有分 java登录界面,编译器没报错,但数据库里的用户密码输进去却跳出来的总是错误的对话框 如何点击按钮跳转到了那个一个类 windwos下jdk1.5,打开文件对话框为什么中文显示方块 各位新年好,在下有个小忙,希望各位能帮忙一下,300分赠送。
http://blog.csdn.net/treeroot/archive/2004/11/11/176976.aspx
这个时候,你就要用wait,释放这个对象的锁(如果不释放,其他线程也没有办法往缓冲区中写)。等到其他线程写过缓冲后,调用notify通知你。
synchronized(buffer) {
while (isEmpty(buffer))
wait();
...
}
sleep()使线程睡过去,也就是暂停执行,或者让出cpu给别的线程使用..
wait()是线程等待事件的发生,如果你的线程需要某个条件才能继续运行,就用wait(),他不占资源,只是不运行线程而已 等待命令的意思
notify()通知相应的在等待的线程条件已经满足,可以启动了,采用wait()的线程只能够通过notify或者是notifyAll()启动,不能够自己启动的.synchronized()函数,与wait() notify()等没有关系,他就像数据库中的防止死锁一样的一个函数http://www.kupage.com/webdesign/8/20040329/1720170000027tkg9w74.htm
这里比较详细 建议搂主看看!!!
http://blog.csdn.net/treeroot/archive/2004/11/11/176976.aspx
(wait调用后会释放对象锁,为什么可以释放对象锁,因为它不会运行代码了,不会竞争资源/数据,让其它消费者也能进来等候,当它的线程被notify返回时,它将重新获得对象锁,就象它wait前的状态一样)