Week4 lab01~03

나현·2026년 9월 29일

java2

목록 보기
5/7

lab01



Thread t1 = new MyThread();의 업캐스팅 구조 설명
업캐스팅이란? 자식 객체(new MyThread())를 부모 타입의 변수(Thread t1)담는 것
new MyThread()라는 실제 객체(TV)를 만들어서 부모의 기능을 물려받으면서 자신만의 기능(work())도 추가로 가진 객체가 메모리에 만들어짐. -> Thread t1은 리모컨의 역할.

lab02




MyRunnable과 Horse 각각의 클래스를 한번에 만들어보았다.
Horse에서 sleepTime을 generator라는 변수의 랜덤 값을 이용해 말들마다 달리는 속도가 제각가이 된다.

스레드가 sleep()을 만나면 일시 정지 상태가 되며, CPU의 제어권을 다른 스레드에게 양보한다. 무작위 시간동알 잠들었다가 깨어나기를 반복하게 함으로써, 여러 스레드가 번갈아 가며 실행되는 '동시성'을 명확하게 확인할 수 있다.

lab03




Q. *짱구(th1)이 짱구(p1)보다 먼저 출력될 수 있을까?
A. yes.
start()는 즉시 코드를 실행하는 것이 아니라 실행 대기열에 줄서기와 같다.
운영체제 내부의 스레드 스케줄러에 의해 어떤 스레드에게 먼저 CPU를 할당해서 코드를 실행시킬지 결정되기 때문에(임의 배정) 내가 코드상에 start()를 호출한 순서와 실제 스레드 실행 순서는 일치하지 않을 수 있다.
이처럼 멀티스레드 환경에서 스레드 간의 실행 순서는 코드로 예측할 수 없다!

0개의 댓글