join方法:
执行该方法的线程进入阻塞状态,直到调用该方法的线程结束后再由阻塞转为就绪状态。
我们看这样一段代码——
import java.util.Date;
public class join {
public static void main(String[] args) {
TimeThread timeThread = new TimeThread();
timeThread.start();
new CounterThread(timeThread).start();
}
}
class TimeThread extends Thread{
@Override
public void run() {
for(int i=0;i<=2; i++){
System.out.println("时间线程:"+new Date());
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class CounterThread extends Thread {
private TimeThread timeThread;
public CounterThread(TimeThread timeThread){
this.timeThread = timeThread;
}
@Override
public void run() {
for(int i=1;i<=3; i++){
if(i==2){
try {
timeThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("计数器线程:"+i);
}
}
}
我们先分析main方法,显然先创立了一个时间线程对象,然后让其进入就绪状态。又新建了一个计数器线程对象,并传入刚刚创建的时间线程对象,随后也进入就绪状态。
我们对时间线程进行分析
class TimeThread extends Thread{
@Override
public void run() {
for(int i=0;i<=2; i++){
System.out.println("时间线程:"+new Date());
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
重写了Thread类之中的run方法,进行一个i等于2的for循环,每次循环都执行线程休眠10秒。
我们再对计数器线程进行分析
class CounterThread extends Thread {
private TimeThread timeThread;
public CounterThread(TimeThread timeThrea