달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

'Programming/JAVA'에 해당되는 글 2건

  1. 2011.08.24 Runnable, Thread 차이
  2. 2011.05.02 JAVA Thread 동기화 방법

Thread의 사용방법 : http://scarlett.tistory.com/entry/Thread-2Thread의-사용방법

Thread와 Thread의 상속 : http://scarlett.tistory.com/entry/Thread-3Thread와-Thread의-상속

간단한 Thread 검색 프로그램 : http://scarlett.tistory.com/entry/Thread-4간단한-Thread-검색-프로그램

 

 

쓰레드를 구현하는 방법은 Thread클래스를 상속받는 방법과 Runnable인터페이스를 구현하는 방법, 모두 2가지가 있다. 이 두 가지 방법 중 어느 쪽을 사용해도 별 차이는 없지만 Thread클래스를 상속받으면 다른 클래스를 상속받을 수 없기 때문에, Runnable인터페이스를 구현하는 방법이 일반적이다.

 

Runnable인터페이스를 구현하는 방법은 재사용성(reusability)이 높고 코드의 일관성(consistency)을 유지할 수 있다는 장점이 있기 때문에 보다 객체지향적인 방법이라 할 수 있겠다.

 

1. Thread클래스를 상속

 

class ThreadExtends extends Thread {

public void run() {

// 작업내용 

} // Thread클래스의 run()을 오버라이딩

}

 

 

2. Runnable인터페이스를 구현

 

class RunnableImplements implements Runnable {

public void run() {

// 작업내용 

} // Runnable인터페이스의 추상메서드 run()을 구현

}

 

쓰레드를 구현한다는 것은 위의 2가지 방법 중 어떤 것을 선택하건 간에, 쓰레드를 통해 작업하고자 하는 내용으로 run()의 몸통을 채우기만 하면 되는 것이다.

 

 

Thread클래스를 상속받은 경우와 Runnable인터페이스를 구현한 경우의 인스턴스 생성방법은 다릅니다.

 

1. Thread클래스를 상속받아 실행

ThreadExtends te = new ThreadExtends();

te.start(); 

 

2. Runnable인터페이스를 구현하여 실행

 

Runnable r = new RunnableImplements();

Thread t = new Thread(r);

t.start(); 

 

 

여기서 한 가지 더 알아 두어야 할 것은 한 번 사용한 쓰레드는 다시 재사용할 수 없다는 것이다. 즉, 하나의 쓰레드에 대해 start()가 한 번만 호출될 수 있다는 뜻이다.

 

 

start()와 run()에 대한 차이와 쓰레드가 실행되는 과정

 

run()을 호출하는 것은 생성된 쓰레드를 실행시키는 것이 아니라 단순히 클래스에 속한 메서드 하나를 호출하는 것이다. 반면에 start()는 새로운 쓰레드가 작업을 실행하는데 필요한 호출스택(call stack)을 생성한 다음에 run()을 호출해서, 생성된 호출스택에 run()이 첫 번째로 저장되게 한다.

 

1. main메서드에서 쓰레드의 start메서드를 호출한다.

2. start메서드는 쓰레드가 작업을 수행하는데 사용될 새로운 호출스택을 생성한다.

3. 생성된 호출스택에 run메서드를 호출해서 쓰레드가 작업을 수행하도록 한다.

4. 이제는 호출스택이 2개이기 때문에 스케줄러가 정한 순서에 의해서 번갈아 가면서 실행된다. 

 

한 쓰레드에서 예외가 발생해서 종료되어도 다른 쓰레드의 실행에는 영향을 미치지 않는다.

출처 : http://blog.daum.net/hughlee193/138

'Programming > JAVA' 카테고리의 다른 글

JAVA Thread 동기화 방법  (0) 2011.05.02
Posted by 위너즈
|
Java에서 Thread를 동기화 하는 방법. synchronized를 사용하면 된다. 아래 코드를 참조.
class A extends Thread
{
	private int value = 0;
	public synchronized void setValue(int var)
	{
		value = var;
	}
	public void run()
	{
		//synchronized로 block된 부분은 동기화처리가 된다.
		synchronized (this)
		{
			//처리할 코드
		}
	}
}

public class Test
{
	public station void main(String[] ar)
	{
		A _thread = new A();
		_thread.start();	//run thread
	}
}

'Programming > JAVA' 카테고리의 다른 글

Runnable, Thread 차이  (0) 2011.08.24
Posted by 위너즈
|