CS 지식

스레드

경토리 2024. 11. 30. 01:23
728x90

스레드(Thread)

  • 프로그램 내에서 작업의 최소 단위로, 하나의 프로세스(프로그램) 내에서 동시에 여러 작업을 처리할 수 있게 해주는 흐름입니다.
  • 예를 들어, 하나의 앱이 프로세스라면, 그 안에서 개별적인 작업들이 각기 독립적으로 실행되는 단위를 스레드라고 합니다.


스레드의 특징 

  • 병렬 처리: 여러 스레드를 통해 작업을 동시에 처리할 수 있어 작업 속도가 향상됩니다.
  • 자원 공유: 같은 프로세스 내에 존재하는 스레드는 메모리와 같은 자원을 공유합니다. 예를 들어, 두 개의 스레드가 같은 데이터에 접근할 수 있습니다.
  • 독립적인 실행 흐름: 각 스레드는 독립적으로 실행되지만, 같은 프로세스 내에서 다른 스레드들과 자원을 공유하며 실행됩니다.

스레드의 예

  • 웹 브라우저에서 예를 들면, 한 스레드는 화면에 텍스트와 이미지를 표시하고, 다른 스레드는 사용자의 클릭이나 입력을 처리하며, 또 다른 스레드는 백그라운드에서 파일을 다운로드하는 식으로 여러 작업이 동시에 이루어질 수 있습니다.

 

Synchronized와의 관계 

  • 스레드들이 같은 자원을 공유하면서 동시에 접근할 때, 데이터 충돌이 발생할 수 있습니다.
  • 이를 방지하기 위해 Synchronized 키워드를 사용해 특정 메서드나 코드 블록에 Lock을 걸어 한 번에 하나의 스레드만 접근할 수 있도록 상호 배제를 설정할 수 있습니다.

 


자바의 Synchronized 키워드

  • Synchronized 키워드를 통하여 메서드나 코드 블록에 Lock 을 걸어 스레드 간 상호 배제를 할 수 있습니다.
  • 메서드에 작성할 경우 해당 클래스 인스턴스에 Lock 을 걸고, 코드 블록에 작성할 경우 블록으로 작성된 부분만 Lock 이 걸리게 됩니다.

 


적용 위치

  • 메서드, 코드 블록
  • 메서드에 적용
    • 클래스 인스턴스에 Lock
  • static 메서드에 적용
    • 클래스에 Lock
    • static synchronized 메서드와 synchronized 메서드의 Lock 은 공유하지 않는다.
  • 메서드의 코드 블록에 적용
    • 인스턴스의 블록 단위에 Lock
    • 동기화 전후에는 Lock 이 적용되지 않기 때문에, 효율적 사용 가능
    • block 에 this 를 명시할 경우 메서드에 붙은 것과 같은 효과
public class Test {
  public void run() {
      // ...

      synchronized (this) {
          // ...
      }

      // ...
  }
}

 

  • block 에는 객체 인스턴스를 지정하거나 클래스를 지정할 수 있다.
    • static 메서드의 코드 블록에 적용
    • 클래스에 Lock
    • 코드 블록에 this 를 지정할 수 없다.
    • 동기화 순서
    • Thread 의 동기화 순서를 보장하지 않는다.
728x90