JAVA

이것이 자바다 12장 확인 문제 풀이 (멀티 스레드)

Adev 2022. 9. 15. 00:48

1. 스레드 - 한 가지 작업을 실행하기 위해 순차적으로 실행할 코드를 이어 놓은 것을 말한다.
답 : 4
스레드를 실행하려면 start() 메소드를 호출해야 한다.


2.

package verify.exam02;

public class ThreadExample2 {
public static void main(String[] args) {
Thread thread1 = new MovieThread();
thread1.start();

Thread thread2 = new Thread(new MusicRunnable());
thread2.start();
}
}
package verify.exam02;

public class MovieThread2 extends Thread {
@Override
public void run() {
for(int i=0;i<3;i++) {
System.out.println("동영상을 재생합니다.");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
}
package verify.exam02;

public class MusicRunnable2 implements Runnable {
@Override
public void run() {
for(int i=0;i<3;i++) {
System.out.println("음악을 재생합니다.");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
}

 

 

3. 스레드의 우선순위 - 우선순위가 높은 스레드가 실행 상태를 더 많이 가지도록 스케줄링하는 것을 말한다. 
답 : 4 
10은 가장 높은 우선순위이기 때문에 다른 스레드보다 실행 기회를 더 많이 갖는다.


4. 동기화 메소드와 동기화 블록 - 스레드가 객체 내부의 동기화 메소드 또는 블록에 들어가면 즉시 객체에 잠금을 걸어 다른 스레드가 임계영역 코드를 실행하지 못하도록 한다.
답 : 2
스레드가 동기화 메소드를 실행할 때 다른 스레드는 일반 메소드를 호출할 수 있다. 
//동기화 메소드와 동기화 블록이 여러 개 있을 경우, 스레드가 이들 중 하나를 실행할 때 다른 스레드는 해당 메소드는 물론이고 다른 동기화 메소드 및 블록도 실행할 수 없다.


5. 스레드 일시 정지 상태 - 스레드가 실행할 수 없는 상태이다.
답 : 4
yield() 메소드를 호출하면 실행 대기 상태가 된다.


6. 스레드 상태 제어 - 실행 중인 스레드의 상태를 변경하는 것을 말한다.
답 : 4
다른 스레드가 종료될 때까지 join() 메소드를 멤버로 가지는 스레드는 일시 정지 상태가 된다.


7. interrupt()메소드 - InterruptedException 예외를 발생시켜 스레드를 종료시킨다.
답 : 2 
스레드를 즉시 종료시키는 메소드는 stop() 메소드이다.


8.  

package verify.exam08;

public class MovieThread extends Thread {
@Override
public void run() {
while(true) {
System.out.println("동영상을 재생합니다.");
if(Thread.interrupted()) {
break;
}
}
}
}

 


9. wait()와 notify() 메소드 - 
답 : 4

//wait(long timeout)이나, wait(long timeout, int nanos)를 사용하면 notify()를 호출하지 않아도 지정된 시간이 지나면 스레드가 자동적으로 실행 대기 상태가 된다. 


10. 

package verify.exam10;

public class ThreadExample2 {
public static void main(String[] args) {
Thread thread = new MovieThread();
    thread.setDaemon(true);
thread.start();

try { Thread.sleep(3000); } catch (InterruptedException e) {}
}
}



11.
답 : 1
stop() 메소드는 스레드의 안전성을 해친다고 하여 더 이상 사용하지 않도록 권장된 Deprecated 메소드이다.

 


12. 스레드풀 - 작업 처리에 사용되는 스레드를 제한된 개수만큼 정해 놓고 작업 큐(Queue)에 들어오는 작업들을 하나씩 스레드가 맡아 처리한다.
답 : 4
submit() 메소드로 작업 처리 요청을 하면 즉시 Future 객체를 리턴한다. 
//Future 객체는 작업이 완료될 때까지 기다렸다가(블로킹되었다가) 최종결과를 얻는데 사용된다.

 


13. Future 객체 - 지연 완료 객체이다.

답 : 1

Future은 스레드가 처리한 작업의 결과값을 가지고 있는 객체가 아니다.

//작업 결과가 아니라 작업이 완료될 때까지 기다렸다가 최종 결과를 얻는데 사용된다.