충분히 쌓여가는
main 쓰레드 본문
main 쓰레드
main 메서드의 코드를 수행하는 쓰레드
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world");
}
}
쓰레드는 '사용자 쓰레드'와 '데몬 쓰레드' 두 종류가 있다
실행 중인 사용자 쓰레드가 하나도 없을 때 프로그램은 종료된다
main 메서드가 종료되어도 run 메서드가 남아있기 때문에 프로그램은 종료되지 않는다
코드
try문 주석처리: 소요시간이 바로 찍힌다
class ThreadTest {
static long startTime = 0;
public static void main(String args[]) {
ThreadEx11_1 th1 = new ThreadEx11_1();
ThreadEx11_2 th2 = new ThreadEx11_2();
th1.start();
th2.start();
startTime = System.currentTimeMillis();
// try {
// th1.join(); // main쓰레드가 th1의 작업이 끝날 때까지 기다린다.
// th2.join(); // main쓰레드가 th2의 작업이 끝날 때까지 기다린다.
// } catch(InterruptedException e) {}
System.out.print("소요시간:" + (System.currentTimeMillis() - ThreadTest.startTime));
} // main
}
class ThreadEx11_1 extends Thread {
public void run() {
for(int i=0; i < 300; i++) {
System.out.print(new String("-"));
}
} // run()
}
class ThreadEx11_2 extends Thread {
public void run() {
for(int i=0; i < 300; i++) {
System.out.print(new String("|"));
}
} // run()
}
try 주석 해제: main 메서드가 다른 두 개의 메서드가 끝날 때까지 기다림
class ThreadTest {
static long startTime = 0;
public static void main(String args[]) {
ThreadEx11_1 th1 = new ThreadEx11_1();
ThreadEx11_2 th2 = new ThreadEx11_2();
th1.start();
th2.start();
startTime = System.currentTimeMillis();
try {
th1.join(); // main쓰레드가 th1의 작업이 끝날 때까지 기다린다.
th2.join(); // main쓰레드가 th2의 작업이 끝날 때까지 기다린다.
} catch(InterruptedException e) {}
System.out.print("소요시간:" + (System.currentTimeMillis() - ThreadTest.startTime));
} // main
}
class ThreadEx11_1 extends Thread {
public void run() {
for(int i=0; i < 300; i++) {
System.out.print(new String("-"));
}
} // run()
}
class ThreadEx11_2 extends Thread {
public void run() {
for(int i=0; i < 300; i++) {
System.out.print(new String("|"));
}
} // run()
}
'Java > JAVA3' 카테고리의 다른 글
쓰레드의 우선순위, 쓰레드 그룹 (0) | 2023.08.03 |
---|---|
싱글 쓰레드와 멀티 쓰레드, 쓰레드의 I/O 블락킹(blocking) (0) | 2023.08.03 |
쓰레드의 구현과 실행 (0) | 2023.08.02 |
thread 쓰레드 (0) | 2023.08.02 |
애너테이션 타입 정의하기, 애너테이션의 요소 (0) | 2023.08.01 |