-
Thread 개념 및 Runnable Interface VS Thread ClassJava 2020. 1. 13. 22:47반응형
Thread란?
클래스 실행
-
java 명령어를 이용하여 Class를 실행시키면, Java Process가 실행되고, main() 메서드가 수행되면서 하나의 Thread가 실행
-
많은 Thread 필요시, 생성해주면 됨
-
Java를 사용하여 Web Application을 제공시, WAS를 사용하는데 동일하게 main Thread에서 생성한 Thread들이 수행됨
Process와 Thread
-
하나의 Process내에 여러 Thread가 수행, 어떤 Process든 Thread가 하나 이상 수행
-
여러 Process가 공유하는 하나의 Thread는 없음
-
아무런 Thread를 생성하지 않아도 JVM을 관리하기 위한 여러 Thread가 존재함(GC 관리 Thread 등)
Thread가 생긴 이유
-
Process 하나를 시작하는 것보다 Thread를 하나 추가하는 것이 Resource(자원)을 덜 소비하기 때문(lightweight process 라고도 함)
-
Multi Core시대에 단일 Thread보다 다중 Thread로 실행하는 것이 더 빠른 처리를 할 수 있음
Runnable Interface & Thread Class
Thread 생성 방법 두 가지
Runnable Inteface 사용하기 & Thread Class 사용하기
Thread Class는 Runnable Interface를 구현한 클래스이므로, 어떤 것을 적용하는지의 차이만 있음
두 개 모두 java.lang Package에 있으므로 별도로 import할 필요가 없음
Runnable Interface
선언 메서드 하나임
// 쓰레드가 시작되면 수행되는 메서드 void run()
구현 방법
pacakge jamie.thread; public class RunnableSample implements Runnable { public void run() { // Thread가 시작되면 수행되는 메서드 run() System.out.println("I'm Jamie"); } }
사용 방법
package jamie.thread; public class RunThreads { public static void main(String[] args) { RunTreads threads = new RunThreads(); threads.runBasic(); } public static void runBasic() { RunnableSample runnable = new RunnableSample(); new Thread(runnable).start(); // Thread를 시작하는 메서드 start() System.out.println("Jamie's Runnable"); } } /* Thread가 시작되면 수행되는 메서드 : run() * Thread를 시작하는 메서드 : start() * Runnable Interface 구현 or Thread Class 확장시 run() 메서드를 시작점으로 작성 * Thread 시작은 start()로, 만들지 않아도 Java가 start() 호출시 run() 메서드를 수행하도록 되어있음 * * new Thread(runnable).start(); * Runnable Interface를 구현한 RunnableSample Class를 Thread로 바로 시작할 수는 없고, * Thread Class의 생성자에 해당 객체를 추가하여 시작해주어야 함 * 그 후 .start()로 Thread 시작 */
Thread Class
Runnable Interface 구현
매우 많은 생성자 및 메서드 제공
상속 방법
pacakge jamie.thread; public class ThreadSample extends Thread { public void run() { // Thread가 시작되면 수행되는 메서드 run() System.out.println("I'm Jamie"); } }
사용 방법
package jamie.thread; public class RunThreads { public static void main(String[] args) { RunTreads threads = new RunThreads(); threads.runBasic(); } public static void runBasic() { ThreadSample thread = new ThreadSample(); thread.start(); // Thread를 시작하는 메서드 start() System.out.println("Jamie's Thread"); } } /* Thread를 확장한 Class의 경우 객체에 바로 start() 메서드 호출 가능 * * 단, JAVA는 다중 상속을 지원하지 않으므로, 상속받아야 하는 Class가 있다면 Runnable 구현 방식으로 */
Thread 특징
Thread가 1개일 때는 모든 프로그램이 순차적으로(sequential) 실행
Thread가 여러개일 때는 통제되지 않고 실행됨
-
Thread 구현시 start() 메서드 호출 후에는 run() 메서드의 종료 여부와 관계 없이 바로 다음 줄의 코드를 실행
새로 생긴 Thread가 끝날 때 = run() 메서드가 종료될 때
반응형'Java' 카테고리의 다른 글
Thread 관련 - Object, ThreadGroup, ThreadLocal, volatile (0) 2020.01.16 Thread Class (0) 2020.01.15 java.math.BigDecimal (0) 2020.01.13 java.util Package (0) 2020.01.13 Collection - Map (0) 2020.01.09 -