3 minute read

13.3~13.7

3. start()와 run()

  • run()
    • 클래스에 선언된 메서드 호출
    • 쓰레드에서 수행할 작업을 정의
  • start ()
    • 새로운 쓰레드가 작업을 실행하는데 필요한 호출 스택을 생성한다음 run() 호출
    • 새로운 쓰레드를 만듬
    • 모든 쓰레드는 독립적인 작업 수행을 위해 자신만의 호출 스택을 필요로함
    • 쓰레드가 종료되면 작업에 사용된 호출스택은 소멸
  • main() 메서드의 작업을 수행하는것도 쓰레드
  • 실행중인 사용자 쓰레드가 하나도 없으면 프로그램 종료

4. 싱글쓰레드와 멀티쓰레드

  • 싱글코어에서 하나의 쓰레드로 두 개의 작업을 수행하는 경우 1)
    • task1————→ task2————→
  • 싱글코어에서 두 개의 쓰레드로 두 개의 작업을 수행하는 경우 2)
    • task1 → task2 → task1 → task2 →
  • 1)과 2)를 수행하는데 걸리는 시간은 거의 같음
  • 2)의 경우 작업 전환(Context Switching)이 필요하기 때문에 싱글코어에서 성능이 감소할 수 있음
  • 멀티코어에서는 쓰레드가 같은 자원을 사용하는경우 동시에 두 쓰레드가 수행 될 수 있음 → 자원을두고 쓰레드 간 경쟁 발생
  • 서로 다른 자원을 서로 다른 쓰레드가 사용한다면 멀티 쓰레드가 효율적
    • ex) 사용자의 입력(자원)을 받는작업과 시간을 화면(자원 2)에 출력 하는경우 멀티쓰레드에서는 사용자의 입력을 받는동안 시간을 출력 하지만 싱글쓰레드에서는 입력을 받는동안 출력이 정지됨
  • 작업 전환에서 다음에 실행해야할 위치 등의 정보를 저장하고 읽어오는데 시간 소요
  • 프로세스의경우 더 많은 정보를 저장해야하기때문에 작업 전환에 쓰레드보다 더 많은 시간 소요
  • 자바의 쓰레드는 OS종속적인 부분이 있기에 다른 종류의 OS에서 테스트 필요

5. 쓰레드의 우선순위

  • 쓰레드의 priority 멤버 필드에 의해 쓰레드의 우선순위 결정
  • 우선순위에의해 쓰레드가 얻는 실행 시간 결정
  • 쓰레드인스턴스.setPriority(int newPriority) 메서드로 우선 순위 설정
  • mian쓰레드의의 우선순위는 5
  • 쓰레드를 생성한 쓰레드로부터 우선순의를 기본값으로 상속받음
  • 1(우선순위낮음) ~ 10(우선순위높음) 까지 설정가능

6. 쓰레드 그룹

  • 서로관련된 쓰레드를 그룹으로 다루기 위한 것
  • 쓰레드 그룹에 다른 쓰레드 포함 가능
  • 보안상의 이유로 도입됨
  • 자신이 속한 쓰레드 그룹이나 하위 쓰레드 그룹은 변경 가능
  • 다른 쓰레드 그룹의 쓰레드는 변경 불가

7. 데몬 쓰레드

  • 일반 쓰레드(데몬 쓰레드가 아닌 쓰레드)의 작업을 돕는 보조 역할 수행
  • 일반 쓰레드가 모두 종료되고 나면 강제로 종료
  • ex) 가비지 컬렉터, 워드프로세서의 자동저장, 화면자동갱신
  • 무한루프와 조건문을 이용해서 실행 후 대기, 특정 조건이 만족되면 작업 수행 후 대기
  • 쓰레드인스턴스.setDaemon(true) 호출로 데몬 쓰레드 설정
  • 데몬 쓰레드가 생성한 쓰레드는 자동으로 데몬 쓰레드가 됨

Leave a comment