ArrayBlockingQueue.poll()期间为什么会出现高CPU占用?
创始人
2024-09-14 03:30:52
0

出现高CPU占用的原因是由于ArrayBlockingQueue.poll()操作锁定了线程,并导致线程在等待队列中空转等待新元素出现。为了解决这个问题,可以使用take()方法,该方法会在队列为空时阻塞线程,直到队列中有了新的元素。

示例代码如下:

import java.util.concurrent.ArrayBlockingQueue;

public class Test {

private static final int SIZE = 10;
private static final ArrayBlockingQueue queue = new ArrayBlockingQueue<>(SIZE);

public static void main(String[] args) {

    // 生产者线程
    Thread producer = new Thread(() -> {
        int i = 0;
        while (true) {
            try {
                queue.put(i++);
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    });

    // 消费者线程
    Thread consumer = new Thread(() -> {
        while (true) {
            try {
                int elem = queue.take();
                System.out.println(elem);
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    });

    producer.start();
    consumer.start();

}

}

通过使用take()方法替换poll()方法,队列为空时消费者线程会阻塞而不是空转等待,从而有效降低了CPU占用。

相关内容

热门资讯

开挂辅助工具"拱趴大... 开挂辅助工具"拱趴大菠萝有什么挂"开挂(透视)辅助软件(有挂教学) >>您好:软件加薇1367043...
开挂辅助脚本"pok... 开挂辅助脚本"pokemmo免费脚本"开挂(透视)辅助安装(确实有挂);无需打开直接搜索薇:1367...
开挂辅助插件"wep... wepoker游戏的安装教程是一款专注玩家量身打造的游戏记牌类型软件,在wepoker游戏的安装教程...
开挂辅助插件"红龙p... 开挂辅助插件"红龙poker辅助器免费观看"开挂(透视)辅助脚本(有挂方法);打开点击测试直接进入微...
开挂辅助插件"wep... 您好:这款wepoker有机器人吗游戏是可以开挂的,确实是有挂的,很多玩家在这款wepoker有机器...
开挂辅助安装"wpk... 开挂辅助安装"wpk私人局辅助是真的吗"开挂(透视)辅助插件(了解有挂)1、下载安装好wpk私人局辅...
开挂辅助软件"we ... 开挂辅助软件"we poker辅助器下载"开挂(透视)辅助软件(确实有挂);是一款可以让一直输的玩家...
开挂辅助工具"we-... 开挂辅助工具"we-poker靠谱吗"开挂(透视)辅助安装(有挂辅助)1、下载安装好we-poker...
开挂辅助平台"aap... 大家好,今天小编来为大家解答aapoker ai插件这个问题咨询软件客服可以免费测试直接加微信(13...
开挂辅助神器"wep... 开挂辅助神器"wepoker破解是真的还是假的"开挂(透视)辅助平台(有挂细节)您好:wepoker...