线程之wait与sleep的区别
2015-11-25 12:45
190 查看
sleep是使线程暂停执行一段时间的方法,wait也是一种使线程暂停执行的方法
1.原理不同.....
sleep()方法是线程类Thread的一个静态方法,它会使当前线程暂停执行<一段时间>,等到计时时间一到,线程就会自动醒来。
调用sleep时必须指定时间.
wait()方法是Object类的方法,用于线程间通信,这个方法会使<<当前>><<拥有对象锁的线程>><<等待>>,
直到<<其他线程>>调用notify()或notifyAll进行唤醒。
可以指定时间也可以不指定.
2.对锁的处理机制不同.....
调用sleep()方法不会释放<<对象锁>>,监控状态依然保持.(因为不涉及线程间通信)
调用wait()方法线程会释放掉它所占用的锁。
3.使用区域不同....
wait()方法必须在<<同步方法或者是同步代码块中执行.>>
而sleep()方法则可以放在任何地方执行。
4.sleep方法必须捕获异常,而wait,notify,notifyAll不需要捕获异常。
在sleep的过程中,有可能被其他对象调用interrupt,产生InterruptedException异常。
5.由于sleep不会释放锁标志,容易导致死锁问题的发生。
1.原理不同.....
sleep()方法是线程类Thread的一个静态方法,它会使当前线程暂停执行<一段时间>,等到计时时间一到,线程就会自动醒来。
调用sleep时必须指定时间.
wait()方法是Object类的方法,用于线程间通信,这个方法会使<<当前>><<拥有对象锁的线程>><<等待>>,
直到<<其他线程>>调用notify()或notifyAll进行唤醒。
可以指定时间也可以不指定.
2.对锁的处理机制不同.....
调用sleep()方法不会释放<<对象锁>>,监控状态依然保持.(因为不涉及线程间通信)
调用wait()方法线程会释放掉它所占用的锁。
3.使用区域不同....
wait()方法必须在<<同步方法或者是同步代码块中执行.>>
而sleep()方法则可以放在任何地方执行。
4.sleep方法必须捕获异常,而wait,notify,notifyAll不需要捕获异常。
在sleep的过程中,有可能被其他对象调用interrupt,产生InterruptedException异常。
5.由于sleep不会释放锁标志,容易导致死锁问题的发生。
相关文章推荐
- nankai100_4
- [LeetCode256]Paint House
- nankai100_3
- 指针属性直接赋值 最好先retain 否则内存释放导致crash
- 使用mailx借助外网邮箱地址发送邮件
- AIDL原理解析
- 百度地图api出现 leaked ServiceConnection com.baidu.location.LocationClient错误
- rand()和srand((unsigned)time(NULL))产生的随机数有什么不同http://blog.csdn.net/jinjingwen/article/details/6205537
- C++中的srand(time(null))利用时间设置随机种子产生随机数 http://blog.csdn.net/youoran/article/details/10950671
- nankai100_2
- FlashRAID 发布 与PBlaze4共筑企业固态存储解决方案
- nankai100_1
- HaiHongOJ 1003 God Wang
- Installation error: INSTALL_FAILED_VERSION_DOWNGRADE
- RAID-4与模2和
- 学习笔记7:wait(),notify()与notifyAll()及消费者生产者小案例
- 从vfs_write()到ocfs2_file_aio_write()
- ocfs2_file_aio_write()
- lighttpd, web.py, spawning fcgi failed
- odoo worker 异常Exception("bus.Bus unavailable")