본문 바로가기
  • Coding & Book
학습단/JAVA 학습단

15. 혼공자 15일차(멀티 스레드)

by 루이3 2023. 7. 24.

프로세스

  • 운영체제에서 실행중인 하나의 애플리케이션을 말합니다.

 

스레드

  • 사전적 의미로 한 가닥의 실이라는 뜻입니다.
  • 하나의 스레드는 하나의 코드 실행 흐름을 말합니다.
  • 스레드는 자신의 이름을 가지고 있으며 어떤 작업을 하는지 조사할 목적으로 가끔 사용됩니다.

 

멀티스레드

  • 자신의 메모리를 가지고 실행 하므로 서로 독립적입니다.
  • 하나의 프로세스 내에 동시 실행을 하는 스레드들이 2개 이상인경우를 말합니다.
  • 스레드 하나가 예외를 발생시키면 다른 스레드도 영향을 받습니다.(하나의 프로세스 내부에 생성되기 때문)
  • 대용량 데이터의 처리시간을 줄이기위해 데이터를 분할해서 병렬로 처리할수 있습니다.
  • 다수 클라이언트의 요청을 처리하는 서버를 개발할때에도 사용 할 수 있습니다.

 

메인스레드

  • 자바의 모든 애플리케이션은 메인 스레드가 main() 메소드를 실행하면서 시작합니다.
  • 메인 스레드는 필요에 따라 멀티 스레드를 생성해서 멀티 태스킹을 수행할수 있습니다.
  • 싱글 스레드 애플리케이션에서는 메인 스레드가 종료되면 프로세스도 종료됩니다.
  • 멀티 스레드 애플리케이션에서는  실행중인 프로세스가 하나라도 있으면 프로세스가 종료되지 않습니다.

 

작업 스레드 생성과 실행

  • 어떤 자바 애플리케이션이건 메인스레드가 반드시 있으므로 추가적인 병렬 작업의 수만큼 스레드를 생성하면 됩니다.
  • 자바에서는 작업 스레스가 객체로 생성되기 때문에 클래스가 필요합니다.

 

Thread 클래스로부터 직접 생성하는 방법

  • java.lang.Thread 클래스로부터 작업 스레드를 직접 생성하기 위해 Runnable을 매개값으로 갖는 생성자를
    호출해야 합니다.
  • Runnable은 작업 스레드가 실행 할수 있는 코드를 가지고 있는 객체라고 해서 붙여진 이름입니다.
  • Runnable에는 run() 메소드 하나가 정의되어 있습니다.
  • Runnable은 실제 스레드는 아닙니다. (작업 내용을 가지고 있는 객체 입니다.)
  • 구현 클래스는 run()를 아래와 같이 재정의 해서 작업 스레드가 실행할 코드를 작성해야 합니다.
class Task implements Runnable {
	public void run() {
    스레드가 실행할 코드;
    }
 }

 

 

& 코드 절약하기

  • 코드를 좀더 절약하기 위해 Tread 생성자를 호출할때 Runnable 익명 객체를 매개 값으로 사용 할수 있습니다.
Thread thread = new Thread(new Runnable()) { public void run() { 스레드가 실행할 코드; } });

 

 

Thread 하위 클래스로부터 생성하는 방법

  • 작업스레드가 실행할 작업을 Runnable로 만들지 않고, Thread의 하위 클래스로 작업 스레드를 정의하면서 작업내용을 포함시킬수 있습니다.
public class WorkerThread extends Thread{
	@Override
	public void run() {
		스레드 실행할 코드;
	}
}
Thread thread = new WorkerThread();

 

& 코드 절약하기

  • Thread 익명 객체로 작업 스레드 객체를 생성할 수 있습니다.
Thread thread = new Thread() {
	public void run() {
		스레드가 실행할 코드;
	}
};

 

 

동기화 메소드

  • 스레드가 사용 중인 객체를 다른 스레드가 변경할 수 없게 하려면 스레드 작업이 끝날때까지 객체에 잠금을 걸어
    다른 스레드가 사용할수 없도록 해야합니다.
  • 멀티 스레드 프로그램에서 단 하나의 스레드만 실행 할수 있는 코드 영역을 임계영역이라고 합니다.
  • 자바는 임계영역을 지정하기 위해 동기화 메소드를 제공합니다.

 

 

서버에 관심이 많아 다음에는 임계구역에 대해 알아보겠습니다.

---7/25 추가---

https://loui3.tistory.com/135

 

운영체제와 자바의 임계구역에 대해 알아보자

임계구역 운영체제의 임계구역과 자바에서의 임계구역은 개념적으로 유사합니다. 구현방식과 사용하는 문맥에서 차이가 있다고 합니다. 공유자원 임계구역에 대해 설명하기 전에 공유자원에

loui3.tistory.com

 

'학습단 > JAVA 학습단' 카테고리의 다른 글

4주차 완료  (0) 2023.07.28
16. 혼공자 16일차(스레드 제어)  (0) 2023.07.27
3주차 완료  (0) 2023.07.20
14. 혼공자 14일차(java.util 패키지)  (0) 2023.07.20
13. 혼공자 13일차(기본 API 클래스)  (0) 2023.07.19