⬇️ 프로세스와 스레드에 대해 알아보기 ⬇️
✏️ 멀티 프로세스: 각 프로세스는 서로 독립적. 하나의 프로세스에서 오류가 발생해도 다른 프로세스에 영향을 미치지 않는다
✏️ 멀티 스레드: 하나의 프로세스 내부에 생성. 하나의 스레드가 예외를 발생시키면 프로세스 자체가 종료될 수 있어 예외 처리가 중요하다.
자바의 모든 어플리케이션은 메인 스레드가 main()메소드를 실행하면서 시작한다.
이때 메인 스레드는 멀티 스레드를 생성해서 멀티 태스킹을 수행한다.
✓ 스레드 생성
자바에서는 작업 스레드도 객체로 생성된다.
1️⃣ java.lang.Thread 클래스를 직접 객체화 해서 생성하는 방법
Thread thread = new Thread(Runnable target);
Runnable은 인터페이스 타입이라 구현 객체를 만들어 대입해야 한다.
구현 클래스는 run()을 재정의해서 작업 스레드가 실행할 코드를 작성해야 한다.
// Runnable의 구현 객체
class Task implements Runnable {
public void run() {
// 스레드가 실행할 코드;
}
}
// 작업 스레드 생성
Runnable task = new Task();
Thread thread = new Thread(task);
// 익명 구현 객체 사용
Thread thread = new Thread(new Runnable() {
public void run() {
// 스레드가 실행할 코드;
}
}
코드를 절약하기 위해 Runnable 익명 객체를 매개값으로 사용하는 편이다.
이후 start()메소드를 호출하면 작업 스레드가 실행된다. (+ 바로 실행되는 것이 아니라 실행 대기 상태가 된다)
thread.start();
2️⃣ Thread 클래스를 상속해서 하위 클래스를 만들어 생성
public class WorkerThread extedns Thread {
@Override
public void run() {
// 스레드가 실행할 코드;
}
}
Thread thread = new WorkerThread();
// 익명 객체로 생성하기
Thread thread = new Thread() {
public void run() {
// 스레드가 실행할 코드;
}
}
+ 스레드 이름: 디버깅 할 때 어떤 스레드가 어떤 작업을 하는지 조사할 목적으로 사용됨
디폴트 이름은 Thread-n 이다. 다른 이름으로 설정하고 싶다면 setName() 메소드로 변경하면 된다.
스레드의 이름을 알고 싶다면 getName() 메소드를 호출하면 됨.
thread.setName("스레드 이름");
thread.getName();
두 메소드 다 Thread 클래스의 인스턴스 메소드이기 때문에 스레드 객체의 참조가 필요하다.
만약 참조를 가지고 있지 않다면 정적 메소드인 currentThread()를 이용할 수 있다.
Thread thread = Thread.currentThread();
✓ 동기화 메소드
❗️스레드들이 객체를 공유해서 작업하는 경우, 스레드 A가 사용하던 객체를 스레드 B가 상태를 변경할 수 있다.
스레드가 사용 중인 객체를 다른 스레드가 변경할 수 없게 하려면 스레드 작업이 끝날 때까지 객체에 잠금을 걸어서 다른 스레드가 사용할 수 없도록 해야 한다. 임계 영역을 지정하여 객체를 잠글 수 있는데 이를 위해 동기화 메소드를 사용한다.
✏️ 임계영역 critical section: 멀티 스레드 프로그램 내 단 하나의 스레드만 실행할 수 있는 코드 영역
public synchronized void method() {
// 임계 영역
}
스레드가 동기화 메소드를 실행하는 즉시 객체에는 잠금이 일어나고 스레드가 동기화 메소드를 실행 종료하면 잠금이 풀린다.
'컴퓨터 & 코딩 > Java' 카테고리의 다른 글
[혼공학습단 10기][혼공자] 스레드 제어 (0) | 2023.07.18 |
---|---|
[혼공학습단 10기][혼공자] 4주차 미션 (0) | 2023.07.17 |
[혼공학습단 10기][혼공자] 기본 API 클래스 (0) | 2023.07.13 |
[혼공학습단 10기][혼공자] 상속 / 타입 변환과 다형성 / 추상 클래스 (0) | 2023.07.13 |
[혼공학습단 10기][혼공자] 3주차 미션 (0) | 2023.07.12 |