请教一个CPU使用率的问题【重发】

lance_game 2011-08-16 04:10:37
下面是源代码,目前面临的问题是:当队列queue不空闲的时候,由于线程PoolWorker中采用了while(true)的写法,导致CPU使用率会快速上升。有什么其他的写法可以解决此问题。

public class StatDataWorker {
private final PoolWorker thread;
private final LinkedList queue = new LinkedList();

public StatDataWorker() {
thread = new PoolWorker();
}

public void execute(ParsedData parsedData) {
synchronized(this.queue) {
this.queue.add(parsedData);
this.queue.notify();
}
}

private class PoolWorker extends Thread {
private ParsedData parsedData = null;

public void run() {
while (true) {
synchronized(queue) {
while (queue.isEmpty()) {
try {
queue.wait();
} catch (Exception ex) {ex.printStackTrace();}
}
try {
this.parsedData = (ParsedData) queue.removeFirst();
} catch (Exception ex) {ex.printStackTrace();}
}
try {
if(this.parsedData != null) {
StatDataParser _parser = new StatDataParser();
_parser.parse(this.parsedData);
_parser.save();
this.parsedData = null;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
}
...全文
58 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lance_game 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 iambic 的回复:]

用现成的queue根本不需要你手动去sync/wait/sleep。
[/Quote]

嗯,我也发现了,刚看了LinkedBlockingQueue的jdk文档,全自动的,呵呵。
iambic 2011-08-16
  • 打赏
  • 举报
回复
用现成的queue根本不需要你手动去sync/wait/sleep。
lance_game 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 iambic 的回复:]

找个jdk chm文档,然后搜索queue……
你需要的可能是java.util.concurrent.LinkedBlockingQueue吧。不太确定你的需求。
[/Quote]
嗯,谢谢,但是我个人任务应该不是队列的问题,可能是写法上的问题导致的CPU上升。

目前的问题就是队列非空闲的时候,while(true)中队列的wait()方法就不会被调用,从而导致线程陷入死循环。
Jaya1989 2011-08-16
  • 打赏
  • 举报
回复
帮顶。。。。。。。。。。
iambic 2011-08-16
  • 打赏
  • 举报
回复
找个jdk chm文档,然后搜索queue……
你需要的可能是java.util.concurrent.LinkedBlockingQueue吧。不太确定你的需求。
lance_game 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 iambic 的回复:]

jdk里那么多queue,为什么你要用LinkedList自己山寨这么个蹩脚的queue?
[/Quote]

我看Queue这个类的实例就是LinkedList,你能提供一个给我么,我了解下,对jdk本身的队列不是很熟悉,谢谢了。
softroad 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 iambic 的回复:]

jdk里那么多queue,为什么你要用LinkedList自己山寨这么个蹩脚的queue?
[/Quote]

iambic 2011-08-16
  • 打赏
  • 举报
回复
jdk里那么多queue,为什么你要用LinkedList自己山寨这么个蹩脚的queue?
gukuitian 2011-08-16
  • 打赏
  • 举报
回复
晕。。是不空的时候sleep一会
[Quote=引用 3 楼 gukuitian 的回复:]
为空的时候 sleep() 不行吗
[/Quote]
gukuitian 2011-08-16
  • 打赏
  • 举报
回复
为空的时候 sleep() 不行吗
亲努力啊 2011-08-16
  • 打赏
  • 举报
回复
这完全就一死循环
lance_game 2011-08-16
  • 打赏
  • 举报
回复
各位大大,帮我看看,兄弟我很是纠结呢!

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧