더 나은 자바 스레딩을 이해하기 위해, 나는 다음과 같은 코드를 작성단일 코어 CPU에서 스레딩이 작동하는 이유는 무엇입니까?
public class SimpleRunnableTest {
public static void main(String[] args) throws InterruptedException {
long start = System.currentTimeMillis();
Thread t1 = new Thread(new TT1());
t1.start();
Thread t2 = new Thread(new TT2());
t2.start();
t2.join();
t1.join();
long end = System.currentTimeMillis();
System.out.println("end-start="+(end-start));
}
}
class TT1 implements Runnable {
public void run(){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class TT2 implements Runnable {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
내가 스레딩을 사용하고 있기 때문에 내가 Thread.sleep(5000)
및 main
스레드에서 Thread.sleep(1000)
순차적으로, 소비되는 시간이 6 sec
것 실행할 수 있지만 경우 아이디어는, 그것을 멀티 코어 CPU 시스템에 대해서만 5 sec
의 비용이들 것입니다. 하지만 내 질문은 :
결과가 여전히 단일 코어 CPU 컴퓨터에서 5 sec
인 이유는 무엇입니까? 물론 스레딩이 사용되지만, 단지 시분할 멀티플렉싱을 통한 스레딩이 아닙니다.?
시분할 다중화에 대한 나의 이해는 다음과 같습니다. Thread.sleep(5000)
은 작업 A이고 Thread.sleep(1000)
은 작업 B이며 A1 : A2, A3; B1, B2
단지 순차입니다 : 중, A1, A2, A3가, B1, B2
이시간 분할 다중 스레딩 그냥되는 :이 경우 A1, B1, A2, B2, A3
, 어떻게 올 첫 번째 비용은 6 초이고 두 번째 비용은 5입니다.
여기 기지가 있습니까?
슬립 모드로 전환되면 스레드 컨텍스트 전환이 발생하고 다른 하나는 실행됩니다 (또한 슬립 모드로 전환됨). –
스레드 구현은 시스템 빌더에 따라 다르며 한 시스템에서는 녹색이고 다른 시스템에서는 보라색입니다. 어느 것을 선호합니까? –