我有兩個線程。我正在調用一個(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