在用自定义线程池的时候,遇到cpu100%,经过验证后,发现问题来源于我定义的子线程。

子线程的主要功能是从任务队列(LinkedBlockingQueue)里面持续拿出任务,并且执行。

以下为令CPU100的代码。

private class WorkThread extends Thread

{

@Override

public void run()

{

while(flag)

{

Runnable task=null;

if(flag&&!taskQueue.isEmpty())//当队列非空

{

try

{

task=taskQueue.poll();//拿到任务,若没有则拿到null

if(task!=null)

task.run();//执行任务

} catch (Exception e)

{

e.printStackTrace();

}

}

}

}

}

之后,随便往while循环里面添加进System.out.println(“xxxx”);

发现CPU降低了,不会升到100,于是我修改了代码如下:

//增加一句Thread.sleep(),令所有线程每次进入while循环的时候,都先休眠释放资源,这CPU就不会升到100

private class WorkThread extends Thread

{

@Override

public void run()

{

while(flag)

{

try {

Thread.sleep((long) 0.5);//先释放资源,避免cpu占用过高

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

Runnable task=null;

if(flag&&!taskQueue.isEmpty())//当队列非空

{

try

{

task=taskQueue.poll();//拿到任务,若没有则拿到null

if(task!=null)

task.run();//执行任务

} catch (Exception e)

{

e.printStackTrace();

}

}

}

}

}

造成上述现象的原因:LinkedBlockingQueue是线程安全,当多线程同步从队列里面取出任务,在微观时刻,有且只有一个线程能进入队列中取,因此其他线程阻塞等待,此时各线程都持有cpu资源,不释放,

就造成了大量cpu等待,因而CPU会升高;

值得注意的一点:

LinkedBlockingQueue中取出任务方法有几种,比如take(),poll(),一开始我用take方法,发现运行后,线程资源无法得到释放,后来看了api发现take()是阻塞拿,意思是:线程往队列里面拿任务,

如果队列里面没有任务,则进行等待知道有任务再次唤醒。

而poll()方法则是有任务就拿,没任务就返回null,因此不会出现阻塞等待,若上面代码改成用take方法,同样会出现cpu100的问题,也在于阻塞,同时也会出现线程不被GC回收。

php100并发cpu告警,多线程并发导致CPU100%的一种原因和解决办法相关推荐

  1. 分享导致网站被K的原因及解决办法

    相信很多站长都遇到过这样的情况,某天自己网站关键词排名和收录突然暴跌,其实这时可能就要看看是不是网站被K了,判断方法可以看懒猫之前写的文章:南京seo:怎么看出网站首页是否被搜索引擎降权呢,如果被K了 ...

  2. 导致大量kworker的原因_氨氮超标的几种原因及解决办法

    一.有机物导致的氨氮超标 CN 比小于 3 的高氨氮污水,因脱氮工艺要求 CN 比在 4~6,所以需要投加碳源来提高反硝化的完全性.当时投加的碳源是甲醇,因为某些原因甲醇储罐出口阀门脱落,大量甲醇进入 ...

  3. Socket高并发出现TIME_WAIT的原因以及解决办法

    最近公司项目遇到个问题,在Socket并发量较大的情况下,每次服务端发送完数据后,Sevice端采取主动Close的方断开连接.客户端用短连接的方式发送请求,会出现大量请求返回TIME_WAIT的现象 ...

  4. dma访问主存时_DMA导致Cache数据一致性问题的原因及其解决方式(理论篇)

    点击上方公众号名称关注,获得更多内容 ✎ 编 者 悟 语 唉!嫉妒之心真的能俘获它所接触到的任何目标啊--"欲加之罪,何患无辞"呢?"觉悟高的"更有" ...

  5. Android电视 网页卡,四种导致智能电视卡顿的原因及解决方法!

    原标题:四种导致智能电视卡顿的原因及解决方法! 看智能电视最怕遇到的就是卡顿.画面突然顿住,开始转圈圈,让很多用户既气愤又无奈.其实智能电视的卡顿问题,有多方面的原因.本文梳理出几个常见原因及解决办法 ...

  6. 使用Lock and Load X 插件时导致Final Cat Pro意外退出的解决办法

    Lock and Load X是一款Mac平台上的视频稳定防抖插件,适用于FCPX.PR以及AE软件.lock and load x Mac版比PR和FCPX自带的防抖插件,功能更强大,效果更加突出, ...

  7. Frameset导致Cookies和Session丢失的原因及解决办法

    参考资料 1 Frameset导致Cookies和Session丢失的原因及解决办法 http://blog.csdn.net/zl_c/article/details/1742775  2 使用fr ...

  8. 安全狗php站点404,开启安全狗响应内容保护导致404返回200状态码的解决办法

    开启安全狗响应内容保护导致404返回200状态码的解决办法 2020-04-08 开启安全狗响应内容保护导致404状态码返回200的解决办法 今天无意中对www.tbadc.com的404错识做了一个 ...

  9. U盘插入电脑导致电脑关机的原因及解决办法

    前段时间发生了两次极其尴尬的事情,小编的U盘插到两个人人的电脑上都给人家整蓝屏了,小编搜集了一下,U盘插入电脑导致电脑蓝屏的原因有很多,小编在这里总结并分享一下可能的原因及解决办法: 1.Window ...

最新文章

  1. BZOJ 2004 [Hnoi2010]Bus 公交线路
  2. 成都Uber优步司机奖励政策(4月8日)
  3. html5实现贪吃蛇,分享一个用html5实现的贪吃蛇特效代码
  4. numpy函数:[6]arange()详解
  5. Visual Studio Online 的 FAQ:iPad 支持、自托管环境、Azure 账号等
  6. python后台截屏_Python实现屏幕截图
  7. 如何在GPT分区上安装WIN7
  8. 如何逃过taint droid的跟踪
  9. 信息安全完全参考手册之风险分析(第二章)
  10. androidpn的学习研究(七)Androidpn-server的添加其他xmpp相关的协议(如查看好友列表等)...
  11. Http网络传递参数中文乱码问题解决办法
  12. 英特尔发布首款支持 5G NR试验平台 ,离2020年5G商用又进一步
  13. 使用TASM时报错extra characters on line的解决办法
  14. 无法打开包括文件: “QTcpSocket”: No such file or directory
  15. 树上10只鸟,开枪打死1只,还剩几只?
  16. (5)Redis主从同步原理及详细配置
  17. STM32小项目之ds18b20测温在oled上显示
  18. 【华人学者风采】麦立强 武汉理工大学
  19. 3GPP TS 23501-g51 中英文对照 | 4.2.5a Radio Capabilities Signalling optimisation
  20. 基于主成分分析的人脸识别及表情识别

热门文章

  1. jsf表单验证_动态表单,JSF世界期待已久
  2. java超出gc开销限制_超出了GC开销限制– Java堆分析
  3. 通过SPANN方式将Spring&Quartz与自定义注释集成
  4. javadoc定义异常_Doclava:来自Google的自定义Javadoc Doclet
  5. 依赖注入–字段vs构造函数vs方法
  6. Java EE 7 / JAX-RS 2.0:具有自定义HTTP标头的简单REST API身份验证和授权
  7. JVM PermGen –您在哪里?
  8. 新的自定义控件:TaskProgressView
  9. Spring集成文件轮询和测试
  10. Java EE CDI处理程序方法示例