Java中wait和sleep区别
来源:互联网 发布:淘宝店铺排行榜怎么看 编辑:程序博客网 时间:2024/05/01 15:26
- super类不同:
对于sleep()方法是属于Thread类,而wait()方法,则是属于Object类。 - 是否释放线程锁 ( ):
在调用sleep()方法的过程中,线程不会释放对象锁。
而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备 - 使用范围:
wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
synchronized(x){ x.notify() //或者wait() }
- 是否捕获异常:
sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
是否释放线程锁的问题:
下面代码中本要实现每输入一次就再输出一次,但由于sleep函数不释放线程锁,所以实现功能失败;
要想实现并且保证同步,只能使用wait,notify函数(释放线程锁)
class Data{ String name; String sex;}class Input implements Runnable{ Data d; int flag = 0; Input(Data da) { this.d = da; } public void run(){ while (true) { synchronized (d) { if (flag == 1) { d.name = "John"; d.sex = "male"; } else { d.name = "Ali"; d.sex = "female"; } flag = (flag + 1)%2; } try{Thread.sleep(1);}catch (Exception e) {} }}class Output implements Runnable{ Data d; Output(Data da) { this.d = da; } public void run() { while (true) { synchronized (d) { System.out.println(d.name+ "......" + d.sex); } try{Thread.sleep(1);}catch (Exception e) {} } } }}public class CorrespondenceDemo { public static void main(String[] args) { Data da = new Data(); Thread tA = new Thread(new Input(da)); Thread tB = new Thread(new Output(da)); tA.start(); tB.start(); }}
1 0
- Java中sleep和wait的区别
- Java中sleep和wait的区别
- java中wait和sleep的区别
- Java中sleep和wait的区别
- java线程中wait()和sleep()区别
- Java中sleep和wait的区别
- java中sleep()和wait()的区别
- Java中sleep和wait的区别
- Java中sleep()和wait()的区别
- java中sleep()和wait()的区别?
- Java中sleep()和wait()的区别
- java中wait和sleep的区别
- java中wait 和 sleep 区别
- java中sleep()和wait()的区别
- java中sleep和wait区别
- java中sleep和wait的区别
- Java中wait和sleep区别
- Java中sleep和wait的区别
- 为什么有时可以在头文件可以定义变量,有时不行(变量重定义)。
- Sql_mode
- XML解析(pull解析)
- Java 乱码处理方案
- 在升序排序的数组中插入一个元素
- Java中wait和sleep区别
- XML解析(SAX解析)
- $.fn.extend()和$.extend()
- 高并发解决办法
- 拖拽(一个刚体碰到另一个刚体产生另一个物体)
- Java中文乱码解决之道:Java是如何编码解码的
- 微信公众平台概述
- sdau三 1007
- Linux上 Can't connect to X11 window server 错误解决方法