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
반응형