자바의 멀티태스킹 : Thread 클래스 & Runnable 인터페이스

sehwa!·2023년 9월 8일
0

Java

목록 보기
17/18

📃 Thread

  • Runnable 인터페이스 구현 : implements Runnable
  • Thread 클래스 상속 : extends Thread

Runnable 인터페이스는 추상메소드 하나만 정의하고 있으므로 run() 메소드를 오버라이딩하고 안에 스레드할 코드를 넣어줌

class RunnableImpl implements Runnnable {
@Override
public void run() { 처리코드 }
}

java 는 단일 상속만 허용하므로 다른 클래스를 상속받아야 할 경우
Thread 클래스를 상속받을수 없음
그럴 경우에는 Runnable 인터페이스를 구현

class MultiThread extends Thread {
@Override
public void run() { 처리코드 }
}

✅ 수업예문

1. Runnabla 인터페이스를 구현해 스레드 만들기

class RunnableImplTest : 메인메소드 클래스

static long mainNum;
public static void main(String[] args) {
RunnableImpl r1 = new RunnableImpl(20);
RunnableImpl r2 = new RunnableImpl(20);
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
}

class RunnableImpl implements Runnable : Runnable 인터페이스 구현 클래스

int num;
public RunnableImpl(int num) {
	this.num = num;
}
@override
public void run() {
  for(int i = 1; i<=num; i++) {
	RunnableImplTest.mainNum += i;
    Sysout.println(Thread.currentThread() + " - num 1 : " + RunnableImplTest.mainNum);
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    return;
    }
  }
}

2. Thread 클래스를 상속해 스레드 만들기

class ThreadExtends : 메인메소드 클래스

static int mainNum;
public static void main(String[] args) {
MultiThread t1 = new MultiThread(20);
MultiThread t2 = new MultiThread(20);
t1.start();
t2.start();
}

class MultiThread extends Thread : Thread 클래스를 상속하는 클래스

int num;
public MultiThread(int num) {
	this.num = num;
}
@Override
public void run() {
  for(int i = 1; i<=num; i++) {
  ThreadExtends.mainNum += i;
  Sysout.println(currentThread() + " - num 1 : " + RunnableImplTest.mainNum);
  try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    return;
    }
  }
}

🚫 스레드는 start() 메소드를 사용하여 실행
run() 메소드를 사용하면 메인메소드에서 실행됨

3. 스레드의 우선순위

스레드는 1~ 10까지 우선순위를 가진다
기본 우선순위는 5로 설정됨
** 우선순위가 높다고 실행시간을 반드시 보장하는 건 아님

0개의 댓글