您的位置:首页 > 汽车 > 时评 > Java线程阻塞:原因

Java线程阻塞:原因

2024/10/20 3:21:03 来源:https://blog.csdn.net/qq_41840843/article/details/140364805  浏览:    关键词:Java线程阻塞:原因

Java线程阻塞:原因

  • 1. sleep()
  • 2. suspend() 和 resume()(不推荐)
  • 3. yield()
  • 4. wait() 和 notify()/notifyAll()


💖The Begin💖点点关注,收藏不迷路💖

线程阻塞是一个重要的概念,它决定了线程何时能够执行。以下是几种常见的线程阻塞原因。

1. sleep()

sleep()方法使线程暂停执行指定的时间(毫秒为单位),期间线程不会占用CPU资源。常用于等待资源就绪或实现简单的延时。

try {  Thread.sleep(1000); // 线程暂停1秒  
} catch (InterruptedException e) {  e.printStackTrace();  
}

2. suspend() 和 resume()(不推荐)

这两个方法曾用于暂停和恢复线程,但已废弃,因为它们可能导致死锁和其他同步问题。现代Java程序应避免使用。

最佳实践: 避免使用suspend()和resume(),改用wait()/notify()或Lock/Condition等更现代的同步机制。

3. yield()

yield()方法建议当前线程放弃CPU,但不保证立即发生。它可以在一定程度上提高程序的响应性,但过度使用可能影响性能。

Thread.yield(); // 建议当前线程放弃CPU

4. wait() 和 notify()/notifyAll()

wait()使线程等待,直到其他线程调用notify()或notifyAll(),或等待超时。这是线程间通信的关键机制,用于协调线程间的执行顺序。

synchronized(obj) {  while (!condition) {  obj.wait(); // 等待条件满足  }  // 处理逻辑  
}  // 在另一个线程中  
synchronized(obj) {  // 修改条件  obj.notify(); // 或 obj.notifyAll();  
}

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com