wait() 会让当前运行线程 阻塞,并释放对应的对象锁, 一般由当前线程持有的对象锁调用 x.wait();
当前线程必须拥有此对象的monitor(即锁),才能调用此对象的wait()方法能让当前线程阻塞, notify() 会让等待当前线程持有的锁的线程唤醒,进入就绪状态。如果有多个线程等待获取锁,将有一个线程随机获取,进入就绪状态; wait(long timeout) 会让当前线程处于“等待(阻塞)状态”,“直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量”,当前线程被唤醒(进入“就绪状态”); notifyAll() 会让等待当前线程持有的锁的所有线程唤醒。然后将有一个线程随机获取锁,几率取决于cpu调度 yield()的作用是让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权;但是,并不能保证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;也有可能是当前线程又进入到“运行状态”继续运行!
和wait() 的差别:
1.wait()是让当前线程从运行到阻塞,yield()是让线程从运行到就绪状态;
2.wait()释放锁,yield()并不释放锁,yield()是当前线程让出cpu执行时间片
所以,如果多个线程竞争一个锁,一个已持有锁线程yield()并不会导致其他线程获得锁并执行。 sleep()的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”。sleep()会指定休眠时间,线程休眠的时间会大于/等于该休眠时间;在线程重新被唤醒时,它会由“阻塞状态”变成“就绪状态”,从而等待cpu的调度执行。 sleep()不释放锁

join()让“主线程”等待“子线程”结束之后才能继续运行。使得两个线程可以串行运行 interrupt()由一个线程调用另一个线程的.interrupt()方法,会标识这个线程为中断状态,这个线程的isInterrupted()为true。InterruptedException抛出后,标志位会被清除。

最新文章

  1. Don't repeat yourself
  2. redsocks 将socks代理转换成全局代理
  3. CCNA第三章子网划分,变长子网掩码(VLSM)和TCP/IP排错考试要点学习笔记
  4. asp.net mvc SelectList 的selected 失效及解决方案
  5. myBatis自动生成mapping,dao和model
  6. android 一题多改系列——android 打电话实现两种方法
  7. 初涉SQL Server性能问题(2/4):列出等待资源的会话
  8. [Js]无缝滚动
  9. C# 模拟一个处理消息队列的线程类 Message Queue
  10. hdu 3886 Final Kichiku “Lanlanshu” 数位DP
  11. Java WebService简单实例
  12. javascript进击(四)HTML DOM
  13. JavaSE学习总结第13天_API常用对象3
  14. 简易web服务器
  15. centos7默认防火墙firewalld
  16. Windows7下Jupyter Notebook使用入门
  17. ARM指令集详解
  18. AOP切面实现原理以及多个切面切同一个地方时的优先级讲解
  19. PostgreSQL、SQL Server数据库中的数据类型的映射关系
  20. python基础练习。

热门文章

  1. LeetCode算法01 Valid Parentheses
  2. 查看域名https证书到期时间
  3. yum [Errno 12] Timeout on
  4. Android笔记(五十六) Android四大组件之一——ContentProvider,实现自己的ContentProvider
  5. jvm整理
  6. java 静态代码块和spring @value等注解注入顺序
  7. 剑指Offer(三十三):丑数
  8. springboot搭建环境之使用@Slf4j注解方式,进行日志管理
  9. 如何防护DDOS攻击策略
  10. wampserver - windows服务器下php运行环境配置