Java

쓰레드

깊게 생각하고 최선을 다하자 2022. 5. 23. 01:23

Q1. JVM은 기본적으로 아무런 옵션 없이 실행하면, 적어도 얼마의 물리 메모리를 점유하는가?
- 32~64MB를 점유해야 한다.
-> 프로세스 하나가 32~64MB를 점유한다는 것을 의미한다.

Q1-1 WAS는 어디에서 생성한 무엇들이 수행되는 것인가?
- JVM에서 생성한 쓰레드들이 수행되는 것이다

Q2. 쓰레드는 하나 추가하면 얼마의 메모리를 점유하는가?
- 1MB를 점유한다.

Q3. 쓰레드를 다른 말로 뭐라고 하는가?
- 경량 프로세스(light-weight process)라고 한다.

Q4. 요즘은 PC급의 장비도 두 개 이상의 코어가 달려 있는 어떤 시대인가?
- 멀티 코어 시대이다.


Q5. 대부분의 작업은 단일 쓰레드로 실행하는 것보다는 무엇으로 실행하는 것이 더 빠른가?
- 멀티 쓰레드로 실행하는 것이 더 빠르다.
-> 싱글 스레드는 한 번에 하나의 작업만 실행할 수 있다.


Q6. 쓰레드를 생성하는 두 가지 방법은 무엇 무엇인가?
- Runnable 인터페이스와 Thread 클래스이다.


Q7. Runnable 인터페이스에 선언되어 있는 메소드는 무엇인가?
-> run() 메소드이다.

Q8. Runnable 인터페이스를 구현한 RunnableSample 클래스는 무엇인가?
이 때, 패키지명은 e.thread라고 하자.

Q9. Thread 클래스를 구현한 ThreadSample 클래스는 무엇인가?
이 때, 패키지명은 e.thread라고 하자.

Q10. 쓰레드가 수행되는 우리가 구현하는 메소드는 무엇인가?
-


Q11. 쓰레드를 시작하는 메소드는 무엇인가?
-  start() 메소드이다

Q12. 왜 Runnable 인터페이스와 Thread 클래스 2가지 방법을 제공하는가?
- Java에서는 다중상속을 지원하지 않기 때문이다

Q13. 여러분들이 쓰레드라는 것을 start() 메소드를 통해서 시작했다는 것은
어떤 의미인가?
- JVM에 의해 쓰레드가 실행된다는 것을 의미한다

Q13-1. 일반적으로 모든 프로그램은 어떻게 실행하는가?
-

Q14. 하나의 start() 메소드가 시작하면, 그 다음에는 어떤 일이 일어나는가?
-

Q15. Thread 클래스에는 몇 개의 생성자가 존재하는가?
- 8개의 생성자가 존재한다

Q16. 어떤 쓰레드를 생성할 때, 쓰레드를 묶어 놓은 것을 무엇이라고 하는가?
-  ThreadGroup이라고 한다

Q17. sleep() 메소드란 무엇인가?
-  지정한 시간동안 멈추는 것을 의미한다

Q17-1. Thread.sleep() 메소드를 사용할 때 고려해야 하는 점이 무엇인가?
- try~catch문을 사용해야 한다

Q18. Thread클래스의 고유 id를 리턴하는 메소드는 무엇인가?
- getId()이다

Q19. 쓰레드의 우선 순위를 확인하는 메소드는 무엇인가?
쓰레드의 우선순위를 지정하는 메소드는 무엇인가?
- getPriority(), setPriority()이다

Q20. 쓰레드의 우선순위란 무엇인가?
- 대기중인 쓰레드가 수행되어야 하는 순서를 의미한다

Q21. 데몬 쓰레드는 왜 필요한가?
- 예를 들어, 모니터링 쓰레드는 다른 모든 쓰레드가 종료되면 종료되어야 하는데 이 경우 데몬 쓰레드가 필요하다

Q22. 다음 메소드를 synchronized로 선언하면 어떻게 되는가?

public void plus(int value){
   amount += value;
}
public synchronized void plus(int value){
   amount += value;
}

 

Q23. synchronized가 메소드에 있으면 어떤 일이 발생하는가?

- 해당 메소드에는 한 번에 하나의 쓰레드만 접근할 수 있다. 

 

Q24. 메소드에 synchronized를 추가했을 때, 발생할 수 있는 문제는 무엇인가?

- synchronized를 메소드에 선언하면, 실제로 동기화가 필요하지 않은,

  메소드의 다른 파트까지 동기화를 위해 대기해야 한다. 

 

Q25. synchronized를 메소드에 선언하는 것이 아니라 어떻게 선언할 수 있는가?

- 블록 단위로 선언할 수 있다. 

 

Q26. synchronized 블록을 사용할 때에는 무엇이라는 별도의 객체를 사용할 수 있는가?

- lock이라는 별도의 객체를 선언할 수 있다. 

 

Q27. 만약에 amount라는 변수 외에도 interest라는 변수가 있다면,  

         lock 객체가 하나만 있다면 어떤 일이 발생하는가?

         따라서 lock 객체를 어떻게 선언해야 하는가?

- lock 객체를 별도로 선언해야 한다. 

 

Q28. synchronized는 어떤 문제를 해결하기 위해서 필요한 것인가?

- 여러 쓰레드가 하나의 데이터에 동시에 접근하는 문제를 해결하기 위한 것이다 .

 

Q29. StringBuffer 클래스는 쓰레드에 안전하고,

         StringBuilder 클래스는 쓰레드에 안전하지 않다. 

         이 때, StringBuffer는 주요 데이터 처리 부분을 무엇으로 감싸 두었는가?

- synchronized로 감싸두었다. 

 

Q30. StringBuffer 클래스는 어떤 경우에 사용하면 되는가?

         반대로, StringBuilder 클래스는 어떤 경우에 사용하면 되는가?

- 여러 쓰레드가 동시에 접근하는 데이터가 있을 때 사용한다. 

  여러 쓰레드가 동시에 접근하는 데이터가 없을 때 사용한다. 

 

참고
Q1~Q7 자바의 신 5/23
Q8~Q21 자바의 신 6/1

Q22~Q30 자바의 신 6/7   
A1~A7 자바의 신 5/23

A22~A30 6/8