sleep和wait的区别?

来源:互联网 发布:淘宝网半袖 编辑:程序博客网 时间:2024/05/23 18:29

sleep和wait的区别?

java中有两种线程阻塞方法:

一种是调用线程Thread的静态方法Thread.sleep(1000);另一种是调用Object的wait()方法。那么二者有什么区别哪?

1.sleep方法

1)sleep()方法是使得当前线程进入停滞状态(阻塞状态),让出CPU的使用权,目的是不让一个线程独霸进程获取的CUP资源,从而给其他线程时间使用进程获取的CPU资源
2)sleep是Thread类的静态方法,当sleep用在synchronized的同步块中时候,当前线程虽然休眠但是并没有释放同步锁机制,此时其它线程是不能访问同步块中的内容的(睡着了,也占着资源,直到休眠结束);
3)sleep时间到了休眠不一定会立即运行,因为此时其它线程正在运行,除非当前线程优先级高于其它线程;
4)sleep休眠结束的情况:1.休眠时间到了 2.线程被终止system.exit(0) 3.进程被强制终止;

2.wait

1).wait() 方法是object 对象的方法,他也是让线程阻塞,它的阻塞是将当前线程放入等待池中,同时释放了对象锁,也就是其它线程可以可以访问它的对象锁中的资源;
2)wait()必须在静态块或静态方法中使用,否则会抛出IllegalMonitorStateException异常;一般和Object的notify() 或notifyAll() 方合用,称作等待唤醒机制;
3)wait(time) 还可以设置等待的时间;
3.wait和sleep的区别:
1)作用在同步锁时候,sleep是休眠,保持对象锁 ;wait是休眠,释放对象锁



2