IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Java【4】关于不推荐在循环中使用线程休眠的问题 -> 正文阅读

[开发工具]Java【4】关于不推荐在循环中使用线程休眠的问题

场景

????Intelli IDEA会对在循环中使用线程休眠的代码报出警告。涉及该问题的代码十分简单,可抽象为以下过程。

    /**
     * 标记量
     */
    public static boolean FLAG = false;

    /**
     * 主方法
     *
     * @param args 参数集
     * @throws InterruptedException 中断异常对象
     */
    public static void main(String[] args) throws InterruptedException {
        while (true) {
            Thread.sleep(3000);
            if (FLAG) {
                doSomething();
                break;
            }
        }
    }

    /**
     * 做一些事情
     */
    public static void doSomething() {
        System.out.println("Hello World!!!");
    }

????简单的解释一下,就是我想在标记量为true时做一些事情,但是我无法确定标记量被设置为true的时间,因此通过循环来进行无限检查,但我又不想检查的太过频繁,因此每次检查间隔三秒。这看起来是一段非常自洽的代码,但是Intelli IDEA却对之报出了警告。

????Call to ‘Thread.sleep()’ in a loop, probably busy-waiting:在循环中调用Thread.sleep(),可能正在忙等待。这是警告而非异常,代表代码依旧可以被正常编译及运行,但是并不推荐这样做。

原因

????可能导致的严重性能问题是不推荐在循环中使用线程休眠的根本原因。Java线程实现采用内核线程实现,线程的休眠及唤醒(状态切换)需借助操作系统进行,这是一个极其耗时耗力的操作。在线程休眠或运行时间较长的情景下,其对性能的影响还不算明显,因为对线程状态的切换并不频繁。但若线程休眠及运行的时间都很短(例如毫秒/秒,文中案例就是一个典型案例),系统将频繁的对线程状态进行切换,导致严重的性能损耗,并对着循环次数的递增而放大。

解决方案

????使用调度程序替换在循环中使用线程休眠的操作。如果对文中示例有所了解,会发现其本质是一个定时问题,每间隔一段时间进行操作直至达到条件,按文中示例,便是每隔3秒检查标记量并做一些事情,因此我们完全可使用调度程序进行替换。Java中的调度API不少,可供选择的方案很多,这里着重推荐TimerScheduledExecutorService方案,其各自适用于单线程及多线程的环境中。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:48:22  更:2022-03-22 20:48:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:25:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码