z2soo's Blog

JAVA 멀티스레드 본문

Programming/JAVA

JAVA 멀티스레드

z2soo 2023. 1. 11. 15:00
반응형

Key point

1. JAVA 멀티스레드 : 여러 작업을 동시에 실행시키는 방법
2. 인터페이스 implements 시, 무조건 구현해야하는 method 존재 
3. Thread.sleep(초) : 스레드 작업에 (초) 딜레이 
4. random.nextInt(정수) : 정수 범위에서의 랜덤한 정수 생성

 

1. JAVA 멀티스레드 개념 

  • 기본적으로 자바 프로그램은 한 개의 프로세스(프로그램)으로 작동된다. = 싱글 스레드
  • CPU에서 여러 개의 코어를 가지고 있다면, 동시에 여러 가지의 작업을 실행시킬 수 있는데, 이를 멀티 프로세스라고 한다. 다만, 코어수보다 작업이 많다면, 한 개의 코어가 여러가지의 작업을 수행할 수 없는데, 이때 운영체제가 스케줄링이라는 기법으로 시간을 쪼개서(Round-Robin) 여러 개의 작업을 실행시킬 수 있다. 
  • 자바에서는 멀티 작업을 위해서 만들어진 클래스가 있는데, 인터페이스(Runnable)로 구현되어 있다.  해당 인터페이스를 물려받아서(implement) 우리가 원하는 작업들을 멀티스래딩으로 작동시킬 수 있다.
  • Runnable 인터페이스에서는 run() 메소드를 필수적으로 구현해줘야 한다. 
  • 멀티스레드 작업은 백드라운드에서 병렬적으로 실행되며 다른 작업에 관여하지 않는다. 

 

2. Java Code

ThreadWork

package ThreadPack;
import java.util.Random;

//1.인터페이스(Runnable)을 물려받아서 구현한다. (규약을 지킨다)
public class ThreadWork implements Runnable {
	
	//2.run() 메소드를 구현해준다. 
	public void run() {
		//병렬적으로 작업됨을 확인할 수 있는 항목으로 작성해보자.
		//a. 자바에서 일정시간 동안 딜레이 거는 방법 > Thread.sleep()
		//b. 반복문으로 일정시간 딜레이 거는 방법
		//c.
		
		try {			
			//랜덤 숫자 출력
			//랜덤이 작업하는 방식은 현재시간 기반
			Random random = new Random();
			for(int x=1; x<=3; x++) {
				
				//int rand=random.nextInt(100); 
				//위의 경우는 random 값이 나오지 않음 
				//반복문에서 Random 작업시 빠른 시간으로 같은 결과가 나옴
				//반복문의 기반이 되는 값(seed)를 바꿔줘야 함
				//Thread.sleep 사용시 exception 사용은 필수!
				Thread.sleep(2000); //2초 딜레이
				System.out.println(Thread.currentThread().getName() + ": " + random.nextInt(100)); 
			}
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

ThreadPlay

package ThreadPack;

public class ThreadPlay {
	public static void main(String[] args) throws InterruptedException {
		
		Runnable work = new ThreadWork();
		Thread t1 = new Thread(work);
		Thread t2 = new Thread(work);		

		//서로 다른 스레드끼리 작업한다는 것을 확인하는 방법
		//스레드의 고유 이름을 출력
		t1.setName("T1");
		t2.setName("T2");

		//출력되는 것을 확인하면 T1, T2 순서가 일정하지 않음
		//병렬처리의 특징		
		t1.start(); //실제 작업을 실행하는 부분
		t2.start(); 			
	}
}

 

ThreadPlay를 수행한 결과는 아래와 같다. 

 

3. Eclipse Screen

ThreadWork

 

ThreadPlay

반응형
Comments