java中sleep与wait的区别
2015-06-15 18:21
387 查看
转自:http://blog.csdn.net/shineflowers/article/details/40047479
1. Java中sleep和wait的区别
① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。
sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。
② 锁: 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。
Thread.sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”。
③ 使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用。
synchronized(x){
x.notify()
//或者wait()
}
1. Java中sleep和wait的区别
① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。
sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。
② 锁: 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。
Thread.sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”。
③ 使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用。
synchronized(x){
x.notify()
//或者wait()
}
相关文章推荐
- [JAVA]利用google的barcode4j生成二维码和条形码
- 数字证书中keytool命令使用说明
- Java环境变量的配置以及Java小常识
- java.lang.IndexOutOfBoundsException 错误解决
- android eclipse ndk开发环境配置
- 打地鼠 java
- java重载疑惑
- SpringMVC中使用@ResponseBody注解返回值,Ajax取得中文乱码解决方法
- 使用springAOP时没有引入aopalliance包时报的错
- java通过ssl连接LDAP服务器(包括LDAP服务器搭建、openssl数字证书生成、openldap服务器配置启动)
- Java 在Eclipse中的操作技巧
- java.lang.NoClassDefFoundError: com.baidu.mapapi.SDKInitializer(解决方法)
- spring3零配置注解实现Bean定义(包括JSR-250、JSR-330)
- java.io.IOException: This archive has already been finished
- java 反射访问方法
- SpringMVC返回json数据的三种方式
- Eclipse Android 项目 以全新AS结构导入Android Studio
- java 反射
- Java for LeetCode 223 Rectangle Area
- Java算法题