java线程:join方法的使用

join方法的使用

Thread类的方法,不带参数 public final void join()
作用:等待调用该方法的线程结束后才能执行,是一种抢占资源的方式。

没有使用join方法:

package java_thread;

class MyThread2 extends Thread{
    public void run(){
        System.out.println(getName() + "正在执行!");
    }
}
public class JoinDemo {
    public static void main(String[] args) {
        MyThread2 mt = new MyThread2();
        System.out.println("主线程运行结束!");
    }
}

执行多次发现都是主线程先执行:

主线程运行结束!
Thread-0正在执行!

使用join方法:

public static void main(String[] args) {
    MyThread2 mt = new MyThread2();
    mt.start();
    try {
        mt.join();
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println("主线程运行结束!");
}

输出:

Thread-0正在执行!
主线程运行结束!

主线程后执行了。

加入循环语句:

package java_thread;

class MyThread2 extends Thread{
    public void run(){
        for(int i=0; i <10; i++){
            System.out.println(getName() + "正在执行第" + i + "次");
        }
    }
}
public class JoinDemo {
    public static void main(String[] args) {
        MyThread2 mt = new MyThread2();
        mt.start();
        try {
            mt.join();
        } catch (Exception e) {
            e.printStackTrace();
        }
        for(int j=0; j<15; j++){
            System.out.println("主线程正在执行第" + j + "次");
        }
        System.out.println("主线程运行结束!");
    }
}

输出发现也是线程0先执行完10次,主线程再执行:

Thread-0正在执行第0Thread-0正在执行第1Thread-0正在执行第2Thread-0正在执行第3Thread-0正在执行第4Thread-0正在执行第5Thread-0正在执行第6Thread-0正在执行第7Thread-0正在执行第8Thread-0正在执行第9次
主线程正在执行第0次
主线程正在执行第1次
主线程正在执行第2次
主线程正在执行第3次
主线程正在执行第4次
主线程正在执行第5次
主线程正在执行第6次
主线程正在执行第7次
主线程正在执行第8次
主线程正在执行第9次
主线程正在执行第10次
主线程正在执行第11次
主线程正在执行第12次
主线程正在执行第13次
主线程正在执行第14次
主线程运行结束!

若不使用join方法,会发现线程0和主线程随机执行。

还有一种是join带参方法:public final void join(long millis)
作用:等待该线程终止的最长时间为millis毫秒
代码如下:

package java_thread;

class MyThread2 extends Thread{
    public void run(){
        for(int i=0; i<300; i++){
            System.out.println(getName() + "正在执行第" + i + "次");
        }
    }
}
public class JoinDemo {
    public static void main(String[] args) {
        MyThread2 mt = new MyThread2();
        mt.start();
        try {
            mt.join(1);
        } catch (Exception e) {
            e.printStackTrace();
        }
        for(int j=0; j<15; j++){
            System.out.println("主线程正在执行第" + j + "次");
        }
        System.out.println("主线程运行结束!");
    }
}

输出:

Thread-0正在执行第0Thread-0正在执行第1Thread-0正在执行第2Thread-0正在执行第3Thread-0正在执行第4Thread-0正在执行第5Thread-0正在执行第6Thread-0正在执行第7Thread-0正在执行第8次
主线程正在执行第0次  
主线程正在执行第1次  
主线程正在执行第2次  
主线程正在执行第3次  
主线程正在执行第4次  
主线程正在执行第5次  
主线程正在执行第6次  
主线程正在执行第7次  
主线程正在执行第8次
主线程正在执行第9Thread-0正在执行第9次
主线程正在执行第10Thread-0正在执行第10次
主线程正在执行第11Thread-0正在执行第11Thread-0正在执行第12次
主线程正在执行第12Thread-0正在执行第13次
主线程正在执行第13Thread-0正在执行第14次
主线程正在执行第14Thread-0正在执行第15次
主线程运行结束!
Thread-0正在执行第16Thread-0正在执行第17Thread-0正在执行第18Thread-0正在执行第19Thread-0正在执行第20Thread-0正在执行第21Thread-0正在执行第22Thread-0正在执行第23Thread-0正在执行第24Thread-0正在执行第25Thread-0正在执行第26Thread-0正在执行第27Thread-0正在执行第28Thread-0正在执行第29Thread-0正在执行第30Thread-0正在执行第31Thread-0正在执行第32Thread-0正在执行第33Thread-0正在执行第34Thread-0正在执行第35Thread-0正在执行第36Thread-0正在执行第37Thread-0正在执行第38Thread-0正在执行第39Thread-0正在执行第40Thread-0正在执行第41Thread-0正在执行第42Thread-0正在执行第43Thread-0正在执行第44Thread-0正在执行第45Thread-0正在执行第46Thread-0正在执行第47Thread-0正在执行第48Thread-0正在执行第49Thread-0正在执行第50Thread-0正在执行第51Thread-0正在执行第52Thread-0正在执行第53Thread-0正在执行第54Thread-0正在执行第55Thread-0正在执行第56Thread-0正在执行第57Thread-0正在执行第58Thread-0正在执行第59Thread-0正在执行第60Thread-0正在执行第61Thread-0正在执行第62Thread-0正在执行第63Thread-0正在执行第64Thread-0正在执行第65Thread-0正在执行第66Thread-0正在执行第67Thread-0正在执行第68Thread-0正在执行第69Thread-0正在执行第70Thread-0正在执行第71Thread-0正在执行第72Thread-0正在执行第73Thread-0正在执行第74Thread-0正在执行第75Thread-0正在执行第76Thread-0正在执行第77Thread-0正在执行第78Thread-0正在执行第79Thread-0正在执行第80Thread-0正在执行第81Thread-0正在执行第82Thread-0正在执行第83Thread-0正在执行第84Thread-0正在执行第85Thread-0正在执行第86Thread-0正在执行第87Thread-0正在执行第88Thread-0正在执行第89Thread-0正在执行第90Thread-0正在执行第91Thread-0正在执行第92Thread-0正在执行第93Thread-0正在执行第94Thread-0正在执行第95Thread-0正在执行第96Thread-0正在执行第97Thread-0正在执行第98Thread-0正在执行第99
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值