실행중인 프로그램 - 프로세스
프로세스의 단위 - 쓰레드
메인 메소드는 자동으로 실행되는 메인 쓰레드
쓰레드의 이해와 쓰레드의 생성 방법
쓰레드
프로그램 내에서 실행의 흐름을 이루는 최소의 단위
main 메소드의 실행도 하나의 쓰레드에 의해 진행이 된다.
class CurrentThreadName {
public static void main(String[] args) {
Thread ct = Thread.currentThread(); // 현재 진행중인 쓰레드 정보가 담김
String name = ct.getName(); // 쓰레드의 이름을 반환
System.out.println(name);
}
}
main
쓰레드를 생성하는 방법
public static void main(String[] args) {
Runnable task = () -> { // 쓰레드가 실행하게 할 내용
int n1 = 10;
int n2 = 20;
String name = Thread.currentThread().getName();
System.out.println(name + ": " + (n1 + n2));
};
Thread t = new Thread(task);
t.start(); // 쓰레드 생성 및 실행
System.out.println("End " + Thread.currentThread().getName());
}
// Runnable void run()
모든 쓰레드가 일을 마쳐야 프로그램 종료
- 메인쓰레드가 먼저 끝날지 새로생성된 쓰레드가 먼저 끝날지는 알 수 없다!
• 1단계 Runnable을 구현한 인스턴스 생성
• 2단계 Thread 인스턴스 생성
• 3단계 start 메소드 호출
둘 이상의 쓰레드를 생성한 예
public static void main(String[] args) {
Runnable task1 = () -> { // 20 미만 짝수 출력
try {
for(int i = 0; i < 20; i++) {
if(i % 2 == 0)
System.out.print(i + " ");
Thread.sleep(100); // 0.1초간 잠을 잔다.
}
}catch(InterruptedException e) {
e.printStackTrace();
}
};
Runnable task2 = () -> { // 20 미만 홀수 출력
try {
for(int i = 0; i < 20; i++) {
if(i % 2 == 1)
System.out.print(i + " ");
Thread.sleep(100); // 0.1초간 잠을 잔다.
}
}catch(InterruptedException e) {
e.printStackTrace();
}
};
Thread t1 = new Thread(task1);
Thread t2 = new Thread(task2);
t1.start();
t2.start();
}
항상 순서대로 출력되진 않는다!
쓰레드를 생성하는 두 번째 방법 - 람다식 기반인 첫 번째 방법을 더 많이 쓰긴함...
class Task extends Thread {
public void run() { // Thread의 run 메소드 오버라이딩
int n1 = 10;
int n2 = 20;
String name = Thread.currentThread().getName();
System.out.println(name + ": " + (n1 + n2));
}
}
class MakeThreadDemo2 {
public static void main(String[] args) {
Task t1 = new Task();
Task t2 = new Task();
t1.start();
t2.start();
System.out.println("End " + Thread.currentThread().getName());
}
}
• 1단계 Thread를 상속하는 클래스의 정의와 인스턴스 생성
• 2단계 start 메소드 호출
'# 02 > Java' 카테고리의 다른 글
[윤성우 열혈자바] 34-3. 쓰레드를 생성하는 더 좋은 방법 (0) | 2019.10.28 |
---|---|
[윤성우 열혈자바] 34-2. 쓰레드의 동기화 (0) | 2019.10.28 |
[윤성우 열혈자바] 33-3. NIO 기반의 입출력 (0) | 2019.10.28 |
[윤성우 열혈자바] 33-2. NIO.2 기반의 I/O 스트림 생성 (0) | 2019.10.28 |
[윤성우 열혈자바] 33-1. 파일 시스템 (0) | 2019.10.28 |