240730 내일배움캠프 백엔드 Java 6기 TIL : 쓰레드

박대현·2024년 7월 30일
1

1. 쓰레드

A. 정의

  • 프로세스 내에서 일하는 코드 실행의 흐름(일꾼)
  • 싱글쓰레드 vs 멀티쓰레드
    • 싱글쓰레드 : 프로세스 내에서 하나의 쓰레드만 실행되는 것. main() 메서드만 실행하는 경우.
    • 멀티쓰레드 : 메인 쓰레드에 다른 쓰레드를 더 추가하여 여러개를 실행하는 것
      • 장점 : 동시작업 효율로 성능 고도화 및 빠른 응답
      • 단점 : 동기화 문제 & 교착상태 일으킬수 있음

B. Thread & Runnable

public class Main {
    public static void main(String[] args) {
        TestThread thread = new TestThread();
        thread.start(); //start()로 쓰레드를 실행한다.
    }
}

class TestThread extends Thread {
    @Override
    public void run() { //Thread를 상속하면 run() 메서드를 구현해야 한다.
        for (int i = 0; i <100; i++) {
            System.out.print("*");
        }
    }
}
public class TestRunnable implements Runnable {
	@Override
	public void run() {
		// 쓰레드 수행작업 
	}
}

...

Runnable run = new TestRunnable();
Thread thread = new Thread(run); // 쓰레드 생성

thread.start(); // 쓰레드 실행
  • Runnable의 장점 : 클래스인 Thread와 달리, 인터페이스인 Runnable은 다중상속을 받을수 있어 확장성이 좋다.

C. 우선순위 및 상태, 제어

  • 우선순위 : thread1.serPriority(n)
    • n이 높을수록 우선순위가 높다. 하지만 반드시 먼저 종료되는것은 아니다. 확률이 높을 뿐.
  • 상태
    • 일시정지된 쓰레드를 다시 실행시키려면, 실행대기상태로 넘어가야만 함.
  • 제어
    • sleep(n) : 자기 자신만 멈출수 있음. n ms(밀리초)만큼 멈춤. 반드시 예외처리를 해야함.(interrupt를 만나면 다시 실행되기 때문)
    • interrupt() : 일시정지 -> 실행대기 상태로 만듦
    • join() : 지정 쓰레드가 작업하는 것을 기다림. 시간을 지정하지 않으면 끝날때까지 기다림. 반드시 예외처리 해야함.

0개의 댓글