티스토리 뷰

쓰레드란?

하나의 프로세스안에서 쪼개진 태스크이다.
행위중심
같은 메모리를 공유

왜 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();
댓글