본문 바로가기
개발자 양성과정 필기노트/JAVA

멀티쓰레딩

by jono 2021. 11. 13.

# 멀티쓰레딩 구현방법1 - Thread 클래스 상속

1. Thread클래스를 상속받는 서브클래스를 정의함.

2. run() 메서드 오버라이딩 - 멀티쓰레딩으로 처리할 작업을 정의함.

3. 서브클래스의 인스턴스를 생성

4. start() 호출 -> 멀티쓰레딩 작동함.

 

public class Ex02 {
	public static void main(String[] args) {
		MyThread mt1 = new MyThread("★★", 300);//3.서브클래스 인스턴스 생성
		MyThread mt2 = new MyThread("&&", 300);
		MyThread mt3 = new MyThread("--", 300);
		mt1.start();mt2.start();mt3.start(); //4.start()호출 -> 멀티쓰레드 동작
	}
}

class MyThread extends Thread{//1. Thread상속받는 서브클래스 생성
	String str; int count;
    
	public MyThread(String str, int count) {
		super();
		this.str = str;
		this.count = count;
	}

	@Override
	public void run() {//2. run() 오버라이딩하여 멀티쓰레딩으로 처리할 코드정의
		for (int i = 1; i <=count; i++) {
			System.out.println(i+" : "+str);
		}
	}	
}

 


# 멀티쓰레딩 구현방법2 - Runnable 인터페이스를 구현한 서브클래스를 정의

- 1번방법의 경우, 이미 다른 클래스를 상속하는 클래스에서는 사용이 불가능하다.

-> 인터페이스는 여러개를 구현하는 것이 가능하므로 Runnable인터페이스를 구현하는 방법을 사용하면 된다.

=> Thread 또한 Runnable을 구현한 클래스이기 때문!

 

- 단, Runnable인터페이스에는 start()메서드가 존재하지 않아 호출이 불가하다.

-> Runnable인터페이스의 임시객체를 Thread 생성자에 전달하여 간접적인 방식으로 start()메서드를 사용해야함!

 

1. Runnable클래스를 구현하는 서브클래스를 정의함.

2. run()메서드를 오버라이딩하여 멀티쓰레딩으로 처리할 코드를 정의.

3. 해당 서브클래스의 구현객체를 Thread생성자에 전달함.

4. start()메서드로 멀티쓰레딩 실행

public class Ex03 {
	public static void main(String[] args) {
	Thread t1 = new Thread(new YourThread("★★", 300));//3.Runnable객체를 Thread생성자에 전달
	Thread t2 = new Thread(new YourThread("&&", 300));
	Thread t3 = new Thread(new YourThread("--", 300));
	t1.start();t2.start();t3.start();//4.start()메서드로 멀티쓰레딩 실행
	}
}

class A{}
class YourThread extends A implements Runnable{//1.Runnable을 구현하는 서브클래스 생성
	String str;int count;
	public YourThread(String str, int count) {
		super();
		this.str = str;
		this.count = count;
	}
	@Override
	public void run() {//2.run메서드를 오버라이딩하여 멀티쓰레딩으로 처리할 코드 정의
		for (int i = 1; i <=count; i++) {
			System.out.println(i+" : "+str);
		}
	}
}

# 멀티쓰레딩 구현 코드 - 변형하기

- Runnble구현 클래스를 별도로 정의하지 않고 Thread생성자에 바로 정의하는 방법.

 

방법1. Thread 객체생성 & Runnable구현 & 객체생성 & 전달

Thread t = new Thread(new Runnable(){run()메서드 오버라이딩});
t.start();
Thread t = new Thread(new Runnable() {
	@Override
	public void run() {//멀티쓰레딩으로 구현할 코드
		for (int i = 1; i <=3000; i++) {
			System.out.println(i+": A작업");
		}
	}	
);
t.start();

 

방법2. 다 한줄로 합치기

new Thread(new Runnable(){run메서드 오버라이딩}).start();
new Thread(new Runnable() {
	@Override
	public void run() {
		for (int i = 1; i <=3000; i++) {
			System.out.println(i+": AA작업");
}}}).start();

댓글