我有两个线程。我正在调用一个(SocketThread
),然后从那个调用另一个线程('ProcessThread')。我的问题是,在执行过程中,CPU使用率为50%。当我在ProcessThread run
方法中添加TimeUnit.NANOSECONDS.sleep(1)
时,它减少到0%。这是修改的正确方法吗?或者一般的任何建议,以减少银联的使用。Java线程 - 高cpu利用率?
下面是我的代码:
public class SocketThread extends Thread {
private Set<Object> setSocketOutput = new HashSet<Object>(1, 1);
private BlockingQueue<Set<Object>> bqSocketOutput;
ProcessThread pThread;
@Override
public void run() {
pThread = new ProcessThread(bqSocketOutput);
pThread.start();
for(long i=0; i<= 30000; i++) {
System.out.println("SocketThread - Testing" + i);
}
}
}
public class ProcessThread extends Thread {
public ProcessThread(BlockingQueue<Set<Object>> bqTrace) {
System.out.println("ProcessThread - Constructor");
}
@Override
public void run() {
System.out.println("ProcessThread - Exectution");
while (true) {
/*
try {
TimeUnit.NANOSECONDS.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
}
}
}
你在'while(true)'循环中实际做了什么?答案将取决于此。 – ARRG 2012-02-22 16:14:33
你正在ProcesThread中运行一个无限循环。除了使用完整的内核,你还期望什么? – Mat 2012-02-22 16:15:01
如果你实际上并没有在while循环中做任何事情,我可以向你保证你的CPU将非常忙于检查这个条件,并且相当长一段时间。如果你想让这个循环只是挂出来,那么你应该让它休息一下。 – deraj 2012-02-22 16:16:57