下面是源代码,目前面临的问题是:当队列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();
        }
      }
    }
  }
}

解决方案 »

  1.   

    为空的时候  sleep()  不行吗
      

  2.   

    晕。。是不空的时候sleep一会
      

  3.   

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

  4.   


    我看Queue这个类的实例就是LinkedList,你能提供一个给我么,我了解下,对jdk本身的队列不是很熟悉,谢谢了。
      

  5.   

    找个jdk chm文档,然后搜索queue……
    你需要的可能是java.util.concurrent.LinkedBlockingQueue吧。不太确定你的需求。
      

  6.   

    嗯,谢谢,但是我个人任务应该不是队列的问题,可能是写法上的问题导致的CPU上升。目前的问题就是队列非空闲的时候,while(true)中队列的wait()方法就不会被调用,从而导致线程陷入死循环。
      

  7.   

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

  8.   


    嗯,我也发现了,刚看了LinkedBlockingQueue的jdk文档,全自动的,呵呵。