[Java] 멀티 쓰레드

무1민·2023년 11월 9일
0

java

목록 보기
2/4

저번 시간에 쓰레드와 멀티 쓰레드에 관해서 포스팅하였다.
이번 시간엔 자바로 멀티 쓰레드를 구현하는 방법에 대해서 글을 올려보겠다.

🎶Thread 구현 방법

Java에서 Thread를 구현하는 방법은 두가지가 있다.
하나는 Thread 클래스를 상속받는 것이고 하나는 Runnable 인터페이스를 구현하는 것이다.

1. Thread Class

순서는 다음과 같다.

a) Thread Class를 상속받은 Class를 하나 만든다.
b) run() 메서드를 overriding하여 수행할 일을 코딩한다.
c) main thread에서 a단계에서 만든 Class의 start() 메서드를 호출한다.
여기서 start()는 run() 안에 정의된 일을 main 쓰레드가 아닌 별도로 만들어진 thread에서 처리한다는 것이니 반드시 필요하다.

코드는 다음과 같다.

public class ThreadEx {
	public static void main(String[] args) {
    	Thread t = new MyThread();
        t.start();
        
        int cnt = 1;
        int sum = 0;
        while(cnt <= 10){
        	sum += cnt;
            System.out.println("+" + cnt + "=" + sum);
            cnt++;
        }
    }
}
class MyThread extends Thread {
	@Override
    public void run() {
    	int cnt = 1;
        int multipl = 1;
        while(cnt <= 10) {
        	multipl *= cnt;
            System.out.println("x" + cnt + "=" + multipl);
            cnt++;
        }
    }
}

1부터 10까지 곱하는 별도의 MyThread와 1부터 10까지 더하는 main메서드의 Thread를 실행시킨다. 결과는 다음과 같다.

main 쓰레드와 MyThread는 각자 알아서 일을 처리하는 것을 볼 수가 있다.
서로의 일을 신경쓰지 않고 각자의 일을 하는 모습이다.

2. Runnable Interface

a) Runnable Interface를 구현하는 Class를 하나 만든다.
b) run() 메서드를 overriding해서 수행할 일을 코딩한다.
c) 구현된 인터페이스를 쓰레드 생성시 생성자 파라미터로 넣어준다.
d) main thread에서 a단계에서 만든 Class의 start() 메서드를 호출한다.

코드는 다음과 같다.

public class RunnableEx {
	public static void main(String[] args){
    	Runnable r = new MyRunnable();
        Thread t = new Thread(r);
        t.start();
        
        int cnt = 1;
        int sum = 0;
        while(cnt <= 10){
        	sum += cnt;
            System.out.println("+" + cnt + "=" + sum);
            cnt++;
        }
    }
}
class MyRunnable implements Runnable {
	@Override
    public void run(){
    	int cnt = 1;
        int multipl = 1;
        while(cnt <= 10){
        	multipl *= cnt;
            System.out.println("x" + cnt + "=" + multipl);
            cnt++;
        }
    }
}

이번 시간에 자바로 멀티 쓰레드를 구현하는 방법을 정리했는데, 이렇게 간단하면 정말 좋겠지만,,, 자원을 동시에 사용하거나 순서의 제어가 필요할 경우에 동시성 처리를 해줘야 한다.
쓰레드의 동시성 처리에 관한 문제는 다음 포스팅에서 다루겠다!

profile
야호

0개의 댓글