Thread常见方法:sleep 与 yield
  RuXuq8CpAyRj 2023年12月07日 19 0

sleep

1. 调用 sleep 会让当前线程从 Running进入 Timed Waiting 状态(阻塞)

2. 其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException

3. 睡眠结束后的线程未必会立刻得到执行

4. 建议用 TimeUnit 的 sleep 代替 Thread 的 sleep 来获得更好的可读性

sleep应用:限制对 CPU 的使用

在没有利用 cpu 来计算时,不要让 while(true) 空转浪费 cpu,这时可以使用 yield 或 sleep 来让出 cpu 的使用权给其他程序

sleep实现
while(true) {
 try {
 Thread.sleep(50);
 } catch (InterruptedException e) {
 e.printStackTrace();
 }
}
  • 可以用 wait 或条件变量达到类似的效果
  • 不同的是,后两种都需要加锁,并且需要相应的唤醒操作,一般适用于要进行同步的场景
  • sleep 适用于无需锁同步的场景
wait 实现
synchronized(锁对象) {
 while(条件不满足) { 
 try {
 锁对象.wait();
 } catch(InterruptedException e) {
 e.printStackTrace();
 }
 }
 // do sth...
}
条件变量实现
lock.lock();
try {
 while(条件不满足) {
 try {
 条件变量.await();
 } catch (InterruptedException e) {
 e.printStackTrace();
 }
 }
 // do sth...
} finally {
 lock.unlock();
}


yield

1. 调用 yield 会让当前线程从 Running 进入 Runnable就绪状态,然后调度执行其它线程

2. 具体的实现依赖于操作系统的任务调度器

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月07日 0

暂无评论

推荐阅读
RuXuq8CpAyRj