[Java] 자바의 스레드(Thread)와 동기화(Synchronization) (1)


♦ 자바의 스레드와 동기화
스레드(Thread)
스레드는 프로세스 안에서 실행되는 세부작업 단위로 여러 스레드가 모여 하나의 프로세스를 이루게 된다.

하나의 프로세스 안에 있는 스레드끼리는 자원을 공유하게 된다. 따라서 스레드 간 제어권을 넘길 때도 실행하던 자원을 저장하고 다시 교환하는 과정이 필요 없다.

하나의 프로세스 안에는 여러 스레드가 실행되고 있는 것을 멀티 스레드(Multi-thread) 라고 하며 일반적인 프로세스 처리보다 훨씬 좋은 성능을 보인다.

스레드를 생성하는 2가지 방법
1. java.lang.Thread 클래스를 이용하는 방법
① Thread 클래스를 상속받는 클래스를 작성
② public void run() 메소드를 오버라이딩
③ main 메소드에서 클래스를 객체 생성
④ 해당 객체의 start() 메소드를 호출하여 스레드를 실행

2. java.lang.Runnable 인터페이스를 이용하는 방법
① Runnable 인터페이스를 구현하는 클래스를 작성
② public void run() 메소드를 오버라이딩
③ main 메소드에서 클래스를 객체 생성
④ Thread 객체를 생성. 생성자 인자로 Runnable 을 구현한 클래스 객체를 지정
⑤ Thread 객체의 start() 메소드를 호출하여 스레드를 실행

Thread 클래스는 Runnable 인터페이스를 구현하고 있다. 따라서 Thread 클래스에는 Runnable 인터페이스의 추상메소드인 run() 메소드가 오버라이딩 되어 있다.

스레드가 처리해야 되는 작업은 run() 메소드에서 구현한다.

스레드를 시작하기 위해서는 반드시 start() 메소드를 이용해야 한다. start() 메소드를 호출하면 내부적으로 run() 메소드를 호출하여 스레드를 시작한다.

java.lang.Thread 클래스를 이용하는 방법
Hi 클래스 작성

public class Hi extends Thread {
	public void run() {
		int i=0;
		while(i<100) {
			System.out.println("hi");
			i++;
		}
	}
}

 

Bye 클래스 작성

public class Bye extends Thread {
	public void run() {
		int i=0;
		while(i<100) {
			System.out.println("bye");
			i++;
		}
	}
}

 

스레드 실행

public class Test01 {

	public static void main(String[] args) {
		Hi h = new Hi();
		Bye b = new Bye();
		h.start();
		b.start();	
	}
}

 

java.lang.Runnable 인터페이스를 이용하는 방법
Hi 클래스 작성

public class Hi implements Runnable {
	public void run() {
		int i=0;
		while(i<100) {
			System.out.println("hi");
			i++;
		}
	}
}

 

Bye 클래스 작성

public class Bye implements Runnable {
	public void run() {
		int i=0;
		while(i<100) {
			System.out.println("bye");
			i++;
		}
	}
}

 

스레드 실행

public class Test01 {
	public static void main(String[] args) {
		Hi h = new Hi();
		Bye b = new Bye();

		Thread t1 = new Thread(h);
		Thread t2 = new Thread(b);

		t1.start();
		t2.start();
	}
}

 

자바의 스레드와 동기화 (2) 에서 이어집니다..

바로가기 >> 자바의 스레드와 동기화 (2)

 

답글 남기기