두 개의 스레드가 있습니다. 먼저 하나 (SocketThread
)를 호출하고 그 중 하나에서 다른 스레드 ('ProcessThread')를 호출합니다. 내 문제는 실행하는 동안 CPU 사용률이 50 %라는 것입니다. ProcessThread run
메서드에 TimeUnit.NANOSECONDS.sleep(1)
을 추가하면 0 %로 감소합니다. 이것은 올바른 수정 방법입니까? 또는 CUP 활용을 줄이기위한 일반적인 조언. 다음은 자바 스레드 - 높은 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