본문 바로가기
JAVA

[JAVA] 스레드(Thread), 스레드의 동시성, 멀티 스레드(Multi-Thread)

by code:J 2023. 7. 30.
반응형
SMALL

 

 

스레드(Thread)

스레드는 프로세스 내에서 실행되는 독립적인 실행 흐름입니다.

- 각 스레드는 자체적인 프로세스 자원을 공유합니다.

- 서로 다른 스레드들이 동시에 작업을 수행할 수 있습니다.

- 동시에 작업을 처리함으로써, 자원을 효율적으로 사용하고 프로그램의 성능을 향상할 수 있습니다.

 

 

스레드 생성 방법

Thread 클래스를 상속하는 방법

java.lang.Thread 클래스를 상속하여 스레드를 생성하는 방법입니다.
public class MyThread extends Thread {
    @Override
    public void run() {
        // 스레드가 실행할 작업 내용을 여기에 작성
    }
}

Runnable 인터페이스를 구현하는 방법

java.lang.Runnable 인터페이스를 구현하여 스레드를 생성하는 방법입니다.
이 방법은 스레드 클래스를 상속하는 것보다 더유연한 방식으로 스레드를 생성할 수 있습니다.

 

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 스레드가 실행할 작업 내용을 여기에 작성
    }
}

 

 

스레드의 실행

스레드를 생성하였다면, 해당 스레드를 실행시키는 방법으로는 두 가지가 있습니다.

 

Thread 클래스를 상속하는 방법

Thread 클래스의 start() 메서드를 사용하기
public static void main(String[] args) {
    MyThread myThread = new MyThread();
    myThread.start();
}

Thread 클래스와 Runnable 인터페이스를 모두 사용하는 방법

Thread 클래스와 Runnable 인터페이스 모두 사용하는 경우
public static void main(String[] args) {
    MyRunnable myRunnable = new MyRunnable();
    Thread myThread = new Thread(myRunnable);
    myThread.start();
}

 


스레드(Thread)의 동시성(Concurrency)  VS  멀티스레드( Multi-Thread)

멀티스레드스레드 동시성 기본적으로 같은 의미를 가지는 용어입니다.

스레드의 동시성 여러 개의 스레드가 동시에 실행되는 것을 의미합니다.

여러 스레드가 동시에 작업을 수행하므로, 이러한 상황에서 스레드 간의 동기화와 상호작용에 주의해야 합니다.

 

멀티스레드는 하나의 프로세스 내에서 여러 개의 스레드가 동시에 실행되는 것을 의미합니다.

이는 프로그램이 동시에 여러 작업을 수행할 수 있도록 하며, 프로그램의 성능과 응답성을 향상할 수 있습니다.

 

따라서, 멀티스레드 프로그래밍은 스레드 동시성을 구현하는 프로그래밍 기법을 의미합니다.

멀티스레드 프로그래밍을 사용하면 여러 스레드가 동시에 작업하고 자원을 공유할 수 있으므로, 동시성 문제에 유의하여 안정적인 프로그램을 작성해야 합니다.

 

 

스레드 동시성의 장점

1. 성능 향상 

- 동시성은 다수의 작업을 빠르게 처리하고 시스템의 자원을 효율적으로 활용하는 데 도움이 됩니다.

- 특히, 멀티코어 프로그로 프로세서를 가진 컴퓨터에서는 멀티스레드를 이용하여 여러 코어를 활용하여 병렬 처리가 가능합니다.

 

2. 응답성 향상

- 멀티스레드 환경에서는 여러 작업을 동시에 처리하므로, 프로그램이 빠르게 응답할 수 있습니다.

- 예를 들어 GUI(그래픽 사용자 인터페이스)를 가진 애플리케이션에서는 메인 스레드와 별도의 스레드를 사용하여 사용자 입력과 동시에 작업을 처리하여 응답성을 향상할 수 있습니다.

 

3. 자원 공유

- 스레드는 같은 프로세스 내에서 실행되므로, 프로세스 내의 자원(메모리)을 공유하기 쉽습니다.

- 이를 통해, 데이터를 효율적으로 공유하고 통신할 수 있습니다.

 

스레드 동시성의 단점

1. 동기화와 상호 배제의 어려움

- 멀티스레드 환경에서 여러 스레드가 공유된 자원에 동시에 접근하거나 수정하는 경우, 데이터 일관성과 무결성을 유지하기 위해 동기화와 상호 배제 메커니즘을 구현해야 합니다.

(이를 위한 적절한 동기화 기법의 사용은 복잡성을 증가시킬 수 있습니다.)

 

2. 데드락 

- 데드락은 멀티스레드 환경에서 발생할 수 있는 심각한 문제입니다.

- 데드락은 서로 다른 스레드가 서로가 점유한 자원을 기다리는 상태에 빠지면서 전체적인 징행이 멈추는 현상을 말합니다.

 

3. 버그의 어려움 

- 멀티스레드 프로그래밍은 동시성과 상호작용이 많기 때문에, 버그를 발견하고 디버깅하는 것이 어려울 수 있습니다.

- 스레드 간의 경합 조건(Race Condition)이나 동기화 오류 등이 발생할 수 있으며, 이러한 버그를 찾는 것은 복잡한 과정일 수 있습니다.

 

4. 병목 현상

- 멀티스레드 프로그래밍에서는 공유 자원에 대한 경합 조건이 발생할 수 있습니다.

- 이로 인해 성능이 오히려 저하될 수 있습니다.

- 특히, 스레드 간의 동기화를 위한 대기시간이 늘어나는 경우 병목 현상이 발생할 수 있습니다.

반응형
LIST