Thread 기초

언어/JAVA 2023. 12. 17. 10:44

1. Thread Class와 Runnable Interface 구현 2가지 방법 존재
  - Thread Class 상속 시 다른 Class 상속 불가
  - Runnable Interface 구현 시 다른 Class 상속 가능

Thread 클래스 상속 (출처:Java 18 API docs)
Runnable Interface 구현 시(출처:Java 18 API docs)


출처 : https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/lang/Thread.html

 

Thread (Java SE 18 & JDK 18)

All Implemented Interfaces: Runnable Direct Known Subclasses: ForkJoinWorkerThread A thread is a thread of execution in a program. The Java Virtual Machine allows an application to have multiple threads of execution running concurrently. Every thread has a

docs.oracle.com

2. start()와 run() 호출 차이
  - thread의 run()을 호출하는 것은 class에 선언된 메서드를 호출하는 것
  - start()를 호출하는 것은 새로운 thread가 작업을 실행하는데 필요한 call stack을 생성하고, run()을 호출해서 생성된 call stack에 run()이 첫 번째로 올라가게 됨

테스트용 thread 클래스
run() 메소드 호출(단순 메소드 호출) 시 call stack의 첫 메소드가 main메소드
start() 메소드 호출 시 main 메소드 thread에는 영향을 미치지 않음

3. 데몬 스레드(daemon thread)
  - 일반 스레드의 작업을 돕는 보저 역할
  - 일반 스레드가 종료되면 데몬 스레드는 강제 종료
  - "thread변수명".start(); 를 호출하기 전 "thread변수명".setDaemon(boolean 값); 을 해야 데몬 스레드로 지정

4. sleep() 사용법(?)
  - "thread변수명".sleep(~~); 으로 선언해도 되나 sleep() 메소드는 static 메소드이기 때문에 내가 지정한 스레드가 현재 실행중인 thread가 아니라면 main thread가 영향을 받음
  - Thread.sleep(); 으로 호출해야 의미 전달에 혼선이 없음

Posted by 知彼知己百戰不殆
,