네이버 클라우드 캠프/Java

[Java] 멀티스레드

graph-dev 2023. 4. 6. 17:48
728x90

Thread(스레드)

- 영어 사전으로는 실, 흐름 등을 의미합니다.

- 프로그램의 흐름으로 생각해볼 수 있습니다.

- OS는 프로그램 하나를 처리할 때 프로세스라는 단위로 처리합니다.

멀티태스킹 멀티스레드
프로그램을 동시에 여러 개 사용할 때 프로세스가 각각의 프로그램에 하나씩 배정되어 멀티 프로세스로 처리합니다. 프로그램의 내부에서 멀티태스킹이 이루어질 때 사용.

- 멀티태스킹 ≠ 멀티프로세스?

1) 하나의 프로긂이 동시에 두 작업을 합니다.

2) 단일 프로세스만 할당이 되고, 두 작업을 동시에 진행 가능하게 해주는 개념은? "멀티 스레드"

 

 

  • 프로세스 vs 스레드
프로세스 스레드
여러 개가 독립적으로 존재합니다. 프로세스 내에 포함되어 있습니다.
하나가 문제되어도 다른 프로그램에 영향을 주지 않습니다. 하나가 문제되면, 스레드 생성한 프로그램 자체가 종료됩니다.

 

 

프로세스와 스레드의 차이

 

메인스레드

- 메인 메소드를 진행하는 스레드

- 메인 스레드가 진행되면서 다른 스레드가 생성되면, 그것은 "서브스레드"가 됩니다.

- 이렇게 스레드가 2개 이상이면 멀티스레드가 되고 이러한 과정이 멀티스레드 프로그래밍이라 할 수 있습니다.

 

스레드 정의

1. Thread 클래스를 통해 직접 생성 (키워드: Runnable)

  • 기본 스레드 틀은 아래와 같습니다.
Thread thread = new Thread(Runnable target);
class Task implements Runnable {
    @Override
    public void run() {
        //스레드가 처리할 소스코드

    }
}

1) Run 실행할 객체를 다시 인스턴스로 넣어서 실행합니다.

Runnable task = new Task();
Thread thread = new Thread(task);

2) 새로운 메소드를 만들고, 인스턴스 메소드를 그 내부에 만들어서 실행합니다.

Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {

    }
});

 

2. Thread 클래스를 상속받은 자식클래스 사용

class ChildThread extends Thread {
    @Override
    public void run() {
        //스레드가 실행할 코드
    }
}
Thread thread = new ChildTread(); //자식 객체를 만든다.
thread.start() // 이렇게 자식 객체에서도 실행가능.

 

3. Thread의 익명클래스로 익명스레드 활용

Thread t = new Thread() {
    @Override
    public void run() {
        //스레드가 실행할 코드            
    }
}

위 코드를 보면, Thread내 Runnable을 통한 인스턴스화가 따로 진행되지 않았음을 알 수 있습니다.

Runnable 객체를 만들지 않고, 이렇게 익명클래스를 사용할 수 있어서 코드를 단축하고 좀 더 효율적인 코드 작성이 가능하다는 것이 장점입니다.

'네이버 클라우드 캠프 > Java' 카테고리의 다른 글

[Java] JDBC 이야기  (0) 2023.05.01
[Java] 스트림 (Stream)  (0) 2023.04.06
[Java] 상수의 할당  (0) 2023.03.29
[Java] enum 열거형 정리  (0) 2023.03.29
[Java] Collections  (0) 2023.03.29