티스토리 뷰
쓰레드란?
하나의 프로세스안에서 쪼개진 태스크이다. 행위중심 같은 메모리를 공유
왜 run이 아니라 start로 실행하나?
OS가 스케줄링하여 run을 호출하기 때문이다.
자바의 쓰레드 사용법 2가지
- extends java.lang.Thread (Thread 클래스를 상속받거나)
- implements java.lang.Runnable (Runnable 인터페이스를 구현하거나)
왜?
자바는 다중상속이 불가능하다. 따라서 이미 상속받은 클래스를 쓰레드화 시커야 할 때 인터페이스를 사용한다.
Thread 클래스를 상속받아 구현하기
class ThreadTest extends Thread { public ThreadTest(String name) { super(name); // Thread 에 이름을 부여하여 생성 } public void run() { ..... ... //thread가 실행될 부분 정의 } } class ThreadExample { public static void main(String[] args) { ThreadTest th1 = new ThreadTest("First Thread"); th1.start(); // OS에 의해 스케줄링 되어 run() 이 실행됨 } }
인터페이스로 구현하기
- run() 메소드를 반드시 구현한다.
- 실행하기 위해서는 인터페이스 클래스를 Thread 생성자에 인자로 넘기고 Thread를 start한다.
class PrimeRun implements Runnable { long minPrime; PrimeRun(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime . . . } } PrimeRun p = new PrimeRun(143); class PrimeRun implements Runnable { long minPrime; PrimeRun(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime . . . } } new Thread(p).start();
댓글