프로세스
- 운영체제에서 실행중인 하나의 애플리케이션을 말합니다.
스레드
- 사전적 의미로 한 가닥의 실이라는 뜻입니다.
- 하나의 스레드는 하나의 코드 실행 흐름을 말합니다.
- 스레드는 자신의 이름을 가지고 있으며 어떤 작업을 하는지 조사할 목적으로 가끔 사용됩니다.
멀티스레드
- 자신의 메모리를 가지고 실행 하므로 서로 독립적입니다.
- 하나의 프로세스 내에 동시 실행을 하는 스레드들이 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 추가---
'학습단 > 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 |