th1.join();
void join() //작업이 모두 끝날 때까지 void join(long millis) //천분의 일초 동안 void join(long millis, int nanos) //천분의 일초+나노초 동안
InterruptedException
이 발생하면 기다리는 걸 멈추기 때문에 static long startTime = 0;
public static void main(String args[]) {
MyThread1 th1 = new MyThread();
MyThread2 th2 = new MyThread();
th1.start();
th2.start();
startTime = System.currentTimeMillis();
try {
th1.join(); //main쓰레드가 th1의 작업이 끝날 때까지 기다린다.
th2.join(); //main쓰레드가 th2의 작업이 끝날 때까지 기다린다.
} catch(InterruptedException e) {}
System.out.print("소요시간: " + (System.currentTimeMillis() - MyThread.startTime));
} //main
ex13_11
public class Ex13_11 {
static long startTime = 0;
public static void main(String[] args) {
Thread11_1 th1 = new Thread11_1();
Thread11_2 th2 = new Thread11_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() - startTime));
}
}
class Thread11_1 extends Thread{
public void run() {
for(int i=0; i<50; i++)
System.out.print("-");
}
}
class Thread11_2 extends Thread{
public void run() {
for(int i=0; i<50; i++)
System.out.print("|");
}
}
-----------------------------------||||||||||||||||||||||||||||||||||||||||||||||||||---------------소요시간: 5
잘 이해 안감....
남은 시간을 다음 쓰레드에게 양보하고, 자신(현재 쓰레드)은 실행대기한다.
✨static
: 자기 자신한테만 사용 가능!!!
OS스케줄러한테 양보한다고 통보할 뿐, 반드시 동작한다는 보장은 없다.
여기에
else문 안에 Thread.yield();
suspend() 안에 th.interrupt();
stop() 안에 th.interrupt();