私は2つのスレッドを持っています。私は1つ(SocketThread
)を呼び出してから、そのスレッドから別のスレッド( 'ProcessThread')を呼び出しています。私の問題は、実行中にCPU使用率が50%ということです。 ProcessThread run
メソッドにTimeUnit.NANOSECONDS.sleep(1)
を追加すると、0%になります。これは変更する正しい方法ですか?あるいは、CUP利用を減らすための一般的な助言。以下は 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
ProcesThreadで無限ループを実行しています。あなたは完全なコアを使用する以外に何を期待していますか? – Mat
実際にループ中に何もしていないのであれば、あなたのCPUはその状態をかなり忙しくチェックしてくれます。あなたがループを掛けたいだけなら、あなたはそれを眠りに任せるべきです。 – deraj