ToBeMaster-JAVA / Standard-JAVA-Basic

0 stars 0 forks source link

14주차 학습 #15

Open yummygyudon opened 2 years ago

yummygyudon commented 2 years ago

기간 : 2022.03.25 ~ 2022.04.01

1. 교재

📕 Java의 정석_기초편 -제 2권- : 「Chapter 13. 쓰레드 」 마무리

2. 강의

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술마무리



※ 준비 문제

image

01stone commented 2 years ago

《 Chap.1 : 프로세스(process)와 쓰레드(thread) ~ Chap.6 : start()와 run()》

Q1. 멀티쓰레딩의 특징과 사용하는 이유에 대해 서술하시오.

동시에 여러 작업을 할 수 있음
- cpu 사용률 향상, 자원을 효율적으로 사용, 사용자에 대한 응답성 향상, 작업이 분리되어 코드가 간결


Q2. 다음 중 옳은 것을 고르시오.

2

(1) 언제나 싱글쓰레드보다 멀티쓰레드로 작업하는 것이 효율적이며, 따라서 싱글 코어에서 단순히 CPU만을 사용하는 계산작업일 때도 멀티쓰레드로 구현하는 것이 효율적이다.

(2) 싱글 코어인 경우 멀티쓰레드라도 하나의 코어가 번아가며 작업을 수행하는 것이므로 두 작업이 겹치지 않는다.

(3) 모든 쓰레드는 같은 프로세스 내의 다른 쓰레드와 자원을 공유하므로 동일한 호출스택을 공유하여 사용한다. 새로운 호출스택은 오로지 새로운 프로세스를 할당할 때만 생성된다.

(3) 각 프로세스의 실행시간과 실행순서는 언제나 동일한 순위와 순서로 매겨지므로, 매 순간 프로세스와 쓰레드에 할당되는 시간과 타이밍은 언제나 동일하고 같은 결과를 보인다.



《 Chap.7 : main 쓰레드 ~ Chap.10 : 싱글 쓰레드와 멀티 쓰레드 예제 2 》

Q1. 다음 중 빈칸에 알맞는 용어를 쓰시오.

쓰레드는 <A>쓰레드와 <B>쓰레드 두 종류가 존재한다.

A : 싱글    B: 멀티


Q2. 다음 중 문제에 O,X를 표시하고 틀린 것은 알맞게 고치시오.

x 싱글쓰레드 1. 단순 cpu만 사용하는 계산 작업을 하는 경우에도 멀티쓰레드가 더 효율적이다

x? os에 종속적? 2. 멀티쓰레드로 두 작업을 수행할 경우 실행할 때마다 다른 결과를 얻는데, 이것은 쓰레드가 우선순위에 종속적이기 때문이다.

o 3. main 메서드의 작업을 수행하는 것도 쓰레드라고 한다.



《 Chap.11 : 쓰레드의 I/O 블락킹(blocking) ~ Chap.15 : 쓰레드의 우선순위 예제 》

Q1. 빈 칸에 들어갈 알맞은 답을 작성하시오.

* 서로 다른 작업을 처리/수행하는 쓰레드 2개가 있다고 가정하자. ( th1, th2 )

(  a  )쓰레드로 입출력(I/O) 처리를 하게 되면 
th1이 작업을 수행하는 동안 th2는 작업을 수행할 수 없고
(  b  )쓰레드로 입출력(I/O) 처리를 하게 되면
th1이 작업을 수행하는 동안 th2는 작업을 수행할 수 있다.

(  a  )쓰레드로 처리하는 경우에서 볼 수 있듯
한 쓰레드가 입출력 처리 중이라면 다른 쓰레드가 작업을 수행하지 않고 기다리는 것을 (  c  )라고 한다.


Q2. 다음 중 틀린 것을 고르시오. (2개)

3, 4?
1) JVM의 우선순위는 1 ~ 10 의 범위이다.

2) Windows OS의 OS 스케쥴러에는 우선순위 범위가 64단계로 나누어져 있다.

3) JVM에서 setPriority 메서드를 통해 우선순위를 설정하더라도 OS 스케쥴러의 우선순위 설정에 1순위로 반영되는 등의 직접적인 영향을 끼치지 않는다.

4) JVM 쓰레드의 일반 우선 순위는 5 이며 main 쓰레드의 경우, 자동적으로 우선순위 5가 부여된다.

5) 새로 생성된 쓰레드는 자동적으로 자신을 생성한 쓰레드의 우선순위보다 더 높은 우선순위를 가진다.



《 Chap.16 : 쓰레드 그룹(thread group) ~ Chap.19 : 데몬 쓰레드(daemon thread) 예제 》

Q1. 쓰레드 그룹과 관련하여 틀린 설명을 모두 고르시오(2개)

3, 5?
1) 쓰레드 그룹에 다른 쓰레드 그룹을 포함시킬 수 있다.
2) 자신이 속한 쓰레드 그룹이나 상위 쓰레드 그룹은 변경 가능하나, 다른 쓰레드 그룹의 쓰레드는 변경 할 수 없다.
3) 쓰레드를 쓰레드 그룹에 포함시킬 때 Thread의 생성자를 이용한다.
4) 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 기본적으로 자신을 생성한 쓰레드의 상위 쓰레드 그룹에 속한다.
5) 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 자동적으로 main 쓰레드 그룹에 속한다.


Q2. 데몬 쓰레드의 역할에 대해 서술하시오.

데몬 쓰레드가 아닌 일반 쓰레드의 작업을 돕는 보조적 역할



《 Chap.20 : 쓰레드의 상태 ~ Chap.29 : join()과 yield() 예제 》

Q1. sleep() 메서드를 사용할 때 필수로 해줘야 하는 것은?

try-catch로 예외처리


Q2. join()과 yield()의 차이점?

join은 다른 쓰레드가 종료될 때까지 일시정지, yield는 양보


Q3. suspend()와 sleep(), stop()과 interrupt()는 비슷한 기능을 가지고 있다. suspend와 stop은 왜 deprecated 되었는가?

deadlock을 일으키기 쉽게 작성되어서

《 Chap.30 : 쓰레드의 동기화(synchronization) ~ Chap.36 : wait()과 notify() 예제2 》

Q1. 다음 조건에 해당하는 것 3가지를 모두 적으시오.

답 : wait(), notify(), notifyAll()
- Object에 정의되어 있다.
- 동기화(synchronized)블록 내에서만 사용할 수 있다.
- 보다 효율적인 동기화를 가능하게 한다.


Q2. <ㄱ>과 <ㄴ>에 들어갈 말을 적으시오.

답 : <ㄱ> - 잠금/락/lock <ㄴ>- 쓰레드의 동기화

한 쓰레드가 특정 작업을 끝마치기 전까지 다른 쓰레드에 의해
방해받지 않도록 하는 것이 필요해 도입된 개념이 바로
 '임계 영역'과 <ㄱ>이다.
공유 데이터를 사용하는 코드 영역을 임계 영역으로 지정해놓고, 
공유 데이터가 가지고 있는 <ㄱ>을 획득해 단 하나의 쓰레드만
이 영역 내의 코드를 수행할 수 있게 한다.
그리고 해당 쓰레드가 임계 영역 내의 모든 코드를 수행하고 벗어나서
<ㄱ>을 반납해야만 다른 쓰레드가 반납된 <ㄱ>을 획득하여
임계 영역의 코드를 수행할 수 있게 한다.
이처럼 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 
못하도록 막는 것을 <ㄴ>라고 한다.


《 전체 Random Quiz 》

Q1.


Q2.


chaesuhyeon commented 2 years ago

《 Chap.11 : 쓰레드의 I/O 블락킹(blocking) ~ Chap.15 : 쓰레드의 우선순위 예제 》

Q1. 빈 칸에 들어갈 알맞은 답을 작성하시오.

* 서로 다른 작업을 처리/수행하는 쓰레드 2개가 있다고 가정하자. ( th1, th2 )

(  a  )쓰레드로 입출력(I/O) 처리를 하게 되면 
th1이 작업을 수행하는 동안 th2는 작업을 수행할 수 없고
(  b  )쓰레드로 입출력(I/O) 처리를 하게 되면
th1이 작업을 수행하는 동안 th2는 작업을 수행할 수 있다.

(  a  )쓰레드로 처리하는 경우에서 볼 수 있듯
한 쓰레드가 입출력 처리 중이라면 다른 쓰레드가 작업을 수행하지 않고 기다리는 것을 (  c  )라고 한다.


Q2. 다음 중 틀린 것을 고르시오. (2개) 2, 5

1) JVM의 우선순위는 1 ~ 10 의 범위이다.

2) Windows OS의 OS 스케쥴러에는 우선순위 범위가 64단계로 나누어져 있다.

3) JVM에서 setPriority 메서드를 통해 우선순위를 설정하더라도 OS 스케쥴러의 우선순위 설정에 1순위로 반영되는 등의 직접적인 영향을 끼치지 않는다.

4) JVM 쓰레드의 일반 우선 순위는 5 이며 main 쓰레드의 경우, 자동적으로 우선순위 5가 부여된다.

5) 새로 생성된 쓰레드는 자동적으로 자신을 생성한 쓰레드의 우선순위보다 더 높은 우선순위를 가진다.



《 Chap.16 : 쓰레드 그룹(thread group) ~ Chap.19 : 데몬 쓰레드(daemon thread) 예제 》

Q1. 쓰레드 그룹과 관련하여 틀린 설명을 모두 고르시오(2개) 3, 5

1) 쓰레드 그룹에 다른 쓰레드 그룹을 포함시킬 수 있다.
2) 자신이 속한 쓰레드 그룹이나 상위 쓰레드 그룹은 변경 가능하나, 다른 쓰레드 그룹의 쓰레드는 변경 할 수 없다.
3) 쓰레드를 쓰레드 그룹에 포함시킬 때 Thread의 생성자를 이용한다.
4) 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 기본적으로 자신을 생성한 쓰레드의 상위 쓰레드 그룹에 속한다.
5) 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 자동적으로 main 쓰레드 그룹에 속한다.


Q2. 데몬 쓰레드의 역할에 대해 서술하시오. 일반 쓰레드를 돕는 보조적인 역할을 함



《 Chap.20 : 쓰레드의 상태 ~ Chap.29 : join()과 yield() 예제 》

Q1. sleep() 메서드를 사용할 때 필수로 해줘야 하는 것은?

예외 처리


Q2. join()과 yield()의 차이점?

yield()는 static 메서드이고 join은 static 메서드가 아님


Q3. suspend()와 sleep(), stop()과 interrupt()는 비슷한 기능을 가지고 있다. suspend와 stop은 왜 deprecated 되었는가?

교착상태가 발생할 수 있기 때문

《 Chap.30 : 쓰레드의 동기화(synchronization) ~ Chap.36 : wait()과 notify() 예제2 》

Q1. 다음 조건에 해당하는 것 3가지를 모두 적으시오.

- Object에 정의되어 있다.
- 동기화(synchronized)블록 내에서만 사용할 수 있다.
- 보다 효율적인 동기화를 가능하게 한다.

syschronized , wait , notify

Q2. <ㄱ>과 <ㄴ>에 들어갈 말을 적으시오.


한 쓰레드가 특정 작업을 끝마치기 전까지 다른 쓰레드에 의해
방해받지 않도록 하는 것이 필요해 도입된 개념이 바로
 '임계 영역'과 <ㄱ>이다.
공유 데이터를 사용하는 코드 영역을 임계 영역으로 지정해놓고, 
공유 데이터가 가지고 있는 <ㄱ>을 획득해 단 하나의 쓰레드만
이 영역 내의 코드를 수행할 수 있게 한다.
그리고 해당 쓰레드가 임계 영역 내의 모든 코드를 수행하고 벗어나서
<ㄱ>을 반납해야만 다른 쓰레드가 반납된 <ㄱ>을 획득하여
임계 영역의 코드를 수행할 수 있게 한다.
이처럼 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 
못하도록 막는 것을 <ㄴ>라고 한다.

ㄱ : 락 / ㄴ : 쓰레드 동기화

kcho32 commented 2 years ago
  1. 다음 중 빈칸에 알맞는 용어를 쓰시오.

    쓰레드는 쓰레드와 쓰레드 두 종류가 존재한다.

    A : 사용자 B: 데몬

  2. 다음 중 문제에 O,X를 표시하고 틀린 것은 알맞게 고치시오.

    1. 단순 cpu만 사용하는 계산 작업을 하는 경우에도 멀티쓰레드가 더 효율적이다. X
    2. 멀티쓰레드로 두 작업을 수행할 경우 실행할 때마다 다른 결과를 얻는데, 이것은 쓰레드가 우선순위에 종속적이기 때문이다. X
    3. main 메서드의 작업을 수행하는 것도 쓰레드라고 한다. O
  3. 빈 칸에 들어갈 알맞은 답을 작성하시오.

    • 서로 다른 작업을 처리/수행하는 쓰레드 2개가 있다고 가정하자. ( th1, th2 )

    ( 싱글 )쓰레드로 입출력(I/O) 처리를 하게 되면 th1이 작업을 수행하는 동안 th2는 작업을 수행할 수 없고 ( 멀티 )쓰레드로 입출력(I/O) 처리를 하게 되면 th1이 작업을 수행하는 동안 th2는 작업을 수행할 수 있다.

    ( 싱글 )쓰레드로 처리하는 경우에서 볼 수 있듯 한 쓰레드가 입출력 처리 중이라면 다른 쓰레드가 작업을 수행하지 않고 기다리는 것을 ( I/O 블락킹 )라고 한다.

  4. 다음 중 틀린 것을 고르시오. (2개)

    1. JVM의 우선순위는 1 ~ 10 의 범위이다.
    2. Windows OS의 OS 스케쥴러에는 우선순위 범위가 64단계로 나누어져 있다. →뭔가 아닌거 같음
    3. JVM에서 setPriority 메서드를 통해 우선순위를 설정하더라도 OS 스케쥴러의 우선순위 설정에 1순위로 반영되는 등의 직접적인 영향을 끼치지 않는다.
    4. JVM 쓰레드의 일반 우선 순위는 5 이며 main 쓰레드의 경우, 자동적으로 우선순위 5가 부여된다.
    5. 새로 생성된 쓰레드는 자동적으로 자신을 생성한 쓰레드의 우선순위보다 더 높은 우선순위를 가진다. X → 같은
  5. 쓰레드 그룹과 관련하여 틀린 설명을 모두 고르시오(2개)

    1. 쓰레드 그룹에 다른 쓰레드 그룹을 포함시킬 수 있다. 폴더처럼
    2. 자신이 속한 쓰레드 그룹이나 상위 쓰레드 그룹은 변경 가능하나, 다른 쓰레드 그룹의 쓰레드는 변경 할 수 없다. 상위를 바꾸는 경우는 없다고 생각함..
    3. 쓰레드를 쓰레드 그룹에 포함시킬 때 Thread의 생성자를 이용한다.
    4. 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 기본적으로 자신을 생성한 쓰레드의 상위 쓰레드 그룹에 속한다.
    5. 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 자동적으로 main 쓰레드 그룹에 속한다.

    하나는 모르겠음

  6. 데몬 쓰레드의 역할에 대해 서술하시오.

    다른 쓰레드 보조역할

  7. sleep() 메서드를 사용할 때 필수로 해줘야 하는 것은?

    예외 처리(try catch)

  8. join()과 yield()의 차이점?

    join() : 하던 작업을 마치고 지정된 시간만큼 다른 쓰레드가 작업을 수행하도록 → 시간 미지정시 끝날 때 까지

    yield(): 자신에게 주어진 시간을 다음 차례의 쓰레드에 양보, 즉 넘겨주는 것. yield()가 호출된 시간부터 남은 시간은 포기하고 실행 대기 상태가 된다.

  9. suspend()와 sleep(), stop()과 interrupt()는 비슷한 기능을 가지고 있다. suspend와 stop은 왜 deprecated 되었는가?

    교착상태(deadlock)을 일으키기 때문

  10. 다음 조건에 해당하는 것 3가지를 모두 적으시오.

    • Object에 정의되어 있다.
    • 동기화(synchronized)블록 내에서만 사용할 수 있다.
    • 보다 효율적인 동기화를 가능하게 한다.

    모르겠음

  11. <ㄱ>과 <ㄴ>에 들어갈 말을 적으시오.

    한 쓰레드가 특정 작업을 끝마치기 전까지 다른 쓰레드에 의해 방해받지 않도록 하는 것이 필요해 도입된 개념이 바로 '임계 영역'과 <ㄱ>이다. 공유 데이터를 사용하는 코드 영역을 임계 영역으로 지정해놓고, 공유 데이터가 가지고 있는 <ㄱ>을 획득해 단 하나의 쓰레드만 이 영역 내의 코드를 수행할 수 있게 한다. 그리고 해당 쓰레드가 임계 영역 내의 모든 코드를 수행하고 벗어나서 <ㄱ>을 반납해야만 다른 쓰레드가 반납된 <ㄱ>을 획득하여 임계 영역의 코드를 수행할 수 있게 한다. 이처럼 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하도록 막는 것을 <ㄴ>라고 한다.

    ㄱ: 락

    ㄴ: 동기화

lemon0913 commented 2 years ago

《 Chap.7 : main 쓰레드 ~ Chap.10 : 싱글 쓰레드와 멀티 쓰레드 예제 2 》

Q1. 다음 중 빈칸에 알맞는 용어를 쓰시오.

쓰레드는 <A>쓰레드와 <B>쓰레드 두 종류가 존재한다.

A :  사용자   B: 데몬

Q2. 다음 중 문제에 O,X를 표시하고 틀린 것은 알맞게 고치시오.

1. 단순 cpu만 사용하는 계산 작업을 하는 경우에도 멀티쓰레드가 더 효율적이다
  -> X, 싱글쓰레드
2. 멀티쓰레드로 두 작업을 수행할 경우 실행할 때마다 다른 결과를 얻는데, 이것은 쓰레드가 우선순위에 종속적이기 때문이다.
  -> O
3. main 메서드의 작업을 수행하는 것도 쓰레드라고 한다.
  -> O

《 Chap.11 : 쓰레드의 I/O 블락킹(blocking) ~ Chap.15 : 쓰레드의 우선순위 예제 》

Q1. 빈 칸에 들어갈 알맞은 답을 작성하시오.

* 서로 다른 작업을 처리/수행하는 쓰레드 2개가 있다고 가정하자. ( th1, th2 )

(  a  )쓰레드로 입출력(I/O) 처리를 하게 되면 
th1이 작업을 수행하는 동안 th2는 작업을 수행할 수 없고
(  b  )쓰레드로 입출력(I/O) 처리를 하게 되면
th1이 작업을 수행하는 동안 th2는 작업을 수행할 수 있다.

(  a  )쓰레드로 처리하는 경우에서 볼 수 있듯
한 쓰레드가 입출력 처리 중이라면 다른 쓰레드가 작업을 수행하지 않고 기다리는 것을 (  c  )라고 한다.
  • a : 싱글
  • b : 멀티
  • c : 쓰레드의 I/O 블락킹

Q2. 다음 중 틀린 것을 고르시오. (2개)

1) JVM의 우선순위는 1 ~ 10 의 범위이다.

2) Windows OS의 OS 스케쥴러에는 우선순위 범위가 64단계로 나누어져 있다.

3) JVM에서 setPriority 메서드를 통해 우선순위를 설정하더라도 OS 스케쥴러의 우선순위 설정에 1순위로 반영되는 등의 직접적인 영향을 끼치지 않는다.

4) JVM 쓰레드의 일반 우선 순위는 5 이며 main 쓰레드의 경우, 자동적으로 우선순위 5가 부여된다.

5) 새로 생성된 쓰레드는 자동적으로 자신을 생성한 쓰레드의 우선순위보다 더 높은 우선순위를 가진다.

《 Chap.16 : 쓰레드 그룹(thread group) ~ Chap.19 : 데몬 쓰레드(daemon thread) 예제 》

Q1. 쓰레드 그룹과 관련하여 틀린 설명을 모두 고르시오(2개)

1) 쓰레드 그룹에 다른 쓰레드 그룹을 포함시킬 수 있다.
2) 자신이 속한 쓰레드 그룹이나 상위 쓰레드 그룹은 변경 가능하나, 다른 쓰레드 그룹의 쓰레드는 변경 할 수 없다.
3) 쓰레드를 쓰레드 그룹에 포함시킬 때 Thread의 생성자를 이용한다.
4) 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 기본적으로 자신을 생성한 쓰레드의 상위 쓰레드 그룹에 속한다.
5) 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 자동적으로 main 쓰레드 그룹에 속한다.

2), 4)

Q2. 데몬 쓰레드의 역할에 대해 서술하시오.

다른 쓰레드의 작업을 도움


《 Chap.20 : 쓰레드의 상태 ~ Chap.29 : join()과 yield() 예제 》

Q1. sleep() 메서드를 사용할 때 필수로 해줘야 하는 것은?

예외처리

Q2. join()과 yield()의 차이점?

Q3. suspend()와 sleep(), stop()과 interrupt()는 비슷한 기능을 가지고 있다. suspend와 stop은 왜 deprecated 되었는가?

오류가 나기 쉬워서..???

《 Chap.30 : 쓰레드의 동기화(synchronization) ~ Chap.36 : wait()과 notify() 예제2 》

Q1. 다음 조건에 해당하는 것 3가지를 모두 적으시오.

- Object에 정의되어 있다.
- 동기화(synchronized)블록 내에서만 사용할 수 있다.
- 보다 효율적인 동기화를 가능하게 한다.

wait(), notify(), notifyAll()