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 |