public class Demo {
private static final boolean FLAG = true;
public static void main(String[] args) {
while (FLAG) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
// do something
}
}
Call to ‘Thread.sleep()’ in a loop, probably busy-waiting
// 循环中调用 sleep 可能会导致忙等待
// 如 FLAG 变量状态未改变 那么线程可能一直循环,并不断进行线程挂起和唤醒
比如微服务体系中,客户端上报实例状态,或者服务端检测客户端状态都会使用定时轮询的机制。
比如一些用户登录场景,当用户登录状态改变时,发送登录事件进行后续处理,比如登录通知等等
在 Java AQS 等待获取锁和线程池任务为空等待新任务时,会使用等待和唤醒操作
轮询机制 和 等待和唤醒 一般会结合使用,避免线程频繁的挂起和唤醒。
你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发和最新技术趋势的地方。
作为一个 Java 后端技术爱好者,我不仅热衷于探索语言的新特性和技术的深度,还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。
在我的博客上,你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法,以帮助你更好地掌握Java编程。
我鼓励互动和建立社区,因此请留下你的问题、建议或主题请求,让我知道你感兴趣的内容。此外,我将分享最新的互联网和技术资讯,以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进,一起探讨技术世界的无限可能性。
保持关注我的博客,让我们共同追求技术卓越。