• 欢迎来到Compiler网站,如果对网站内容感兴趣或者帮助到你,请为文章点赞,谢谢!

线程wait和sleep

java 奔跑的蜗牛 2个月前 (04-20) 48次浏览 0个评论 扫描二维码

在Java中的多线程是一个抢占式的机制, 而不是分时机制。抢占式机制是有多个线程处于可运行状态, 但是只有一个线程处于运行状态.

共同点

  1. 他们都是在多线程环境下, 可以指定线程阻塞时间的操作, 并返回.

  2. wait()和sleep()都可以通过线程实例的interupt方法打断暂停的状态, 从而使线程能够立即抛出InteruptedException的异常.

NOTE: 线程的interupt的方法, 并不会跑出InteruptedException的异常, 该异常是由线程内部跑出的。如果该线程正在执行正常的业务逻辑, 则可以继续执行。只有在执行wait/join/sleep方法的时候, 会立即抛出InteruptedException的异常信息.

不同点

  1. 每一个对象都有一个锁来控制同步访问, synchronized关键字可以和对象锁交互, 来实现线程的同步

  2. sleep()方法在调用时, 没有释放锁. wait()方法释放了锁, 让其他线程可以进入同步块执行逻辑

  3. wait, notify, notifyAll只能在同步方法或者同步代码块中执行. sleep可以在任何地方执行

  4. sleep必须捕获异常; wait, notify, notifyAll不用捕获异常

  5. sleep是线程Thread方法, 导致线程暂停执行指定时间, 给其他线程执行的机会. 但是监控状态依然保持, 到时候状态会自动恢复。

  6. waitObject方法, 调用该对象, 会导致线程放弃当前已经持有的对象锁, 进入当前对象的等待锁定池. 只有对这个对象发送notify或者notifyAll后才能从对象等待锁定池准备获取对象锁进入可运行状态。


Compiler编程笔记 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:线程wait和sleep
喜欢 (1)
[阳光路上]
分享 (0)
发表我的评论
取消评论
表情 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址