博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
wait与sleep的区别
阅读量:6636 次
发布时间:2019-06-25

本文共 624 字,大约阅读时间需要 2 分钟。

1、这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。

sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。

2、最主要sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。

Thread.Sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”。

3、使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用 
   synchronized(x){ 
      x.notify() 
     //或者wait() 
   }

4、sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

转载于:https://www.cnblogs.com/MJyc/p/7576810.html

你可能感兴趣的文章
Jackson xml json
查看>>
TortoiseGit(乌龟git)保存用户名密码的方法(转)
查看>>
java并行调度框架封装及演示样例
查看>>
摘:《自动化测试技术领航》
查看>>
华硕灵耀3 Deluxe获得“创新设计奖” 但它值得买吗?
查看>>
【翻译】Sklearn与TensorFlow机器学习实用指南 —— 第16章 强化学习(上)
查看>>
Python第一讲——高质量数据挖掘模型开发七步法
查看>>
运维老鸟教你安装centos6.5如何选择安装包
查看>>
终于解决了一个Win7 下 VS 编译的问题,困扰了我好几个月
查看>>
企业级nginx基础、负载、读写分离技术(续一)
查看>>
利用DBMS_ADVISOR.TUNE_MVIEW包生成物化视图创建语句
查看>>
系统安装EMC多路径软件
查看>>
Web前端——Head区域代码规范
查看>>
我认为的android入门学习策略
查看>>
ssh服务配置
查看>>
Windows 8 异步编程
查看>>
XenDesktop项目的规划
查看>>
RDS Best Practices — Fast and Stable Migration to RDS
查看>>
C# 进程间通信(共享内存)
查看>>
jvm(13)-线程安全与锁优化(转)
查看>>