[Java]Thread스레드

Michelle Kim·2025년 4월 15일

Springboot-Java

목록 보기
18/20

스레드

1. 프로세스와 스레드의 개념을 이해합니다.
2. 멀티 태스킹을 위해 작업 스레드를 생성하고 실행할 수 있습니다.
3. 동기화 메소드의 역할을 이해하고 활용할 수 있습니다.
4. 스레드의 실행 대기, 일시 정리, 종료 등의 상태를 제어할 수 있습니다.

1. 멀티 스레드

프로세스 : 운영체제에서 실행중인 하나의 애플리케이션

스레드

멀티 프로세스 : 자신의 메모리를 가지고 실행하므로, 서로 독립적
멀티 스레드 : 하나의 프로세스 내부에 생성되므로, 스레드 하나가 예외를 발생시키면 다른 스레드도 영항을 받는다.

메인 스레드

작업 스레드 생성과 실행

Thread 클래스로부터 직접 생성

Thread thread = new Thraed(Runnable target);

Runnable : 작업 스레드가 실행할 수 있는 코드를 가지고 있는 객체, Runnable은 인터페이스 타입이기 때문 구현 객체를 만들어 대입해야 한다.

  • 작업 내용을 가지고 있는 객체이지, 실제 스레드는 아니다.
  • Runnable 구현 객체를 생성한 후, 이것을 매개값으로 해서 Thread생성자를 호출해야, 비로소 작업 스레드가 생성된다.
class Task implements Runnable{
	public void run(){
    	스레드가 실행할 코드;
    }
}
Runnable task = new Task();

Thread thread = new Thread(task);
  • Thread생성자 호출할 때, Runnable 익명객체를 매개값으로 사용할 수 있다. => 이 방법이 많이 사용됨!
Thread thread = new Thread(new Runnable() {
	public void run(){
    	스레드가 실행할 코드;
    }
}

작업 스레드는 생성되는 즉시 실행되는것이 아니라, start()메소드를 호출해야만 실행된다.

thread.start()

Thread 하위 클래스부터 생성

Thread의 하위 클래스로 작업 스레드를 정의하면서, 작업 내용을 포함 시킬 수 도 있다.
Thread클래스를 상속한 후 run()메소드를 재정의(overriding)해서 스레드가 실행할 코드를 작성하면 된다.

public class WorkerThread extends Thread{
	@Override
	public void run(){
    	스레드가 실행할 코드;
    }
}
Thread thread = new WorkerThread();

코드 절약을 위해, Thread 익명 객체로 작업 스레드 객체 생성 가능

Thread thread = new Thread(){
	public void run(){
    	스레드가 실행할 코드;
    }
};

작업 스레드 객체에서 start()메소드를 호출하며 작업 스레드는 자신의 run()메소드를 실행하게 된다.

thread.start();

동기화 메소드

임계 영역(critical section) : 멀티 스레드 프로그램에서 단 하나의 스레드만 실행할 수 있는 코드 영역
동기화(synchronized) 메소드 : 임계 영역을 지정하기 위해
내부의 동기화 메서드를 실행하면 즉시 객체에 잠금을 걸어 다른 스레드가 동가화 메소드를 실행하지 못하도록 한다.

  • 동기화 메소드는 메소드 전체 내용이 임계 영역이므로, 스레드가 동기화 메소드를 실행하는 즉시 객체에는 잠금이 일어나고, 스레드가 동기화 메소드를 실행 종료하면 잠금이 풀린다.
public synchronized void method(){
	임계 영역;
}
profile
🇬🇧영국대학교)Computer Science학과 졸업 📚Data, AI, Backend 분야에 관심이 많습니다. 👉Email: kimbg9876@gmail.com

0개의 댓글