【三】Java多线程确定线程结束(isAlive、join)

知道线程结束的方法

1.isAlive

public class MoreThread extends Thread {
    int count;
    String thrdName;

    MoreThread(String name){
        count = 0;
        thrdName = name;
    }
    @Override
    public void run() {
        System.out.println(thrdName+" starting.");
        try {
            do {
                Thread.sleep(500);
                System.out.println("In "+thrdName+",count is "+count);
                count++;
            }while (count<10);
        }catch (Exception e){
            System.out.println(thrdName+" interrupted.");
        }

        System.out.println(thrdName+" terminating.");

    }

    public static void main(String[] args) {
        int count = 0;
        System.out.println("Main Thread starting.");
        Thread t1 = new MyThread2("Child #1");
        Thread t2 = new MyThread2("Child #2");
        Thread t3 = new MyThread2("Child #3");
        t1.start();
        t2.start();
        t3.start();

        do {
            System.out.println("Main thread count is " +count++);

            try{
                Thread.sleep(100);
            }catch (Exception e){
                System.out.println("Main thread interrupted.");
            }
        }while (t1.isAlive()||t2.isAlive()||t3.isAlive());
        System.out.println("Main thread ending.");
    }
}
Main Thread starting.
Main thread count is 0
Child #1 starting.
Child #2 starting.
Child #3 starting.
Main thread count is 1
Main thread count is 2
Main thread count is 3
Main thread count is 4
In Child #1,count is 0
In Child #2,count is 0
In Child #3,count is 0
Main thread count is 5
Main thread count is 6
Main thread count is 7
Main thread count is 8
Main thread count is 9
In Child #3,count is 1
In Child #2,count is 1
In Child #1,count is 1
Main thread count is 10
Main thread count is 11
Main thread count is 12
Main thread count is 13
Main thread count is 14
In Child #3,count is 2
In Child #2,count is 2
In Child #1,count is 2
Main thread count is 15
Main thread count is 16
Main thread count is 17
Main thread count is 18
In Child #3,count is 3
In Child #1,count is 3
In Child #2,count is 3
Main thread count is 19
Main thread count is 20
Main thread count is 21
Main thread count is 22
Main thread count is 23
In Child #3,count is 4
In Child #2,count is 4
In Child #1,count is 4
Main thread count is 24
Main thread count is 25
Main thread count is 26
Main thread count is 27
Main thread count is 28
In Child #1,count is 5
In Child #3,count is 5
In Child #2,count is 5
Main thread count is 29
Main thread count is 30
Main thread count is 31
Main thread count is 32
In Child #2,count is 6
In Child #1,count is 6
In Child #3,count is 6
Main thread count is 33
Main thread count is 34
Main thread count is 35
Main thread count is 36
Main thread count is 37
In Child #2,count is 7
In Child #1,count is 7
In Child #3,count is 7
Main thread count is 38
Main thread count is 39
Main thread count is 40
Main thread count is 41
Main thread count is 42
In Child #2,count is 8
In Child #1,count is 8
In Child #3,count is 8
Main thread count is 43
Main thread count is 44
Main thread count is 45
Main thread count is 46
In Child #1,count is 9
Child #1 terminating.
In Child #2,count is 9
Child #2 terminating.
In Child #3,count is 9
Child #3 terminating.
Main thread ending.

Process finished with exit code 0

2.join

thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。

比如在线程B中调用了线程A.join,那么B会等到A执行完成后再执行

public class Join implements Runnable{
    String threadName;
    int count;
    Join(String threadName){
        this.threadName = threadName;
        this.count=0;
    }
    public void run() {
        try {
            for(int i = 0;i <30;i++){
                System.out.println(threadName+" count is "+count);
                 count++;
                Thread.sleep(1000);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println(threadName+" terminating.");
    }

    public static void main(String[] args) {
        try{
        System.out.println("Main Thread start");
        Join r1 = new Join("Thread 1");
        Thread t1 = new Thread(r1);
        t1.start();

        for(int i =0 ;i < 30;i ++){
            Thread.sleep(1000);
            System.out.println("Main thread count is "+i);
            if(i==15){
                t1.join();
            }
        }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
F:\JDK\jdk1.8.0_91\bin\java.exe "-javaagent:F:\intellij\idea2018\IntelliJ IDEA 2018.1.5\lib\idea_rt.jar=58138:F:\intellij\idea2018\IntelliJ IDEA 2018.1.5\bin" -Dfile.encoding=UTF-8 -classpath F:\JDK\jdk1.8.0_91\jre\lib\charsets.jar;F:\JDK\jdk1.8.0_91\jre\lib\deploy.jar;F:\JDK\jdk1.8.0_91\jre\lib\ext\access-bridge-64.jar;F:\JDK\jdk1.8.0_91\jre\lib\ext\cldrdata.jar;F:\JDK\jdk1.8.0_91\jre\lib\ext\dnsns.jar;F:\JDK\jdk1.8.0_91\jre\lib\ext\jaccess.jar;F:\JDK\jdk1.8.0_91\jre\lib\ext\jfxrt.jar;F:\JDK\jdk1.8.0_91\jre\lib\ext\localedata.jar;F:\JDK\jdk1.8.0_91\jre\lib\ext\nashorn.jar;F:\JDK\jdk1.8.0_91\jre\lib\ext\ojdbc6.jar;F:\JDK\jdk1.8.0_91\jre\lib\ext\sunec.jar;F:\JDK\jdk1.8.0_91\jre\lib\ext\sunjce_provider.jar;F:\JDK\jdk1.8.0_91\jre\lib\ext\sunmscapi.jar;F:\JDK\jdk1.8.0_91\jre\lib\ext\sunpkcs11.jar;F:\JDK\jdk1.8.0_91\jre\lib\ext\zipfs.jar;F:\JDK\jdk1.8.0_91\jre\lib\javaws.jar;F:\JDK\jdk1.8.0_91\jre\lib\jce.jar;F:\JDK\jdk1.8.0_91\jre\lib\jfr.jar;F:\JDK\jdk1.8.0_91\jre\lib\jfxswt.jar;F:\JDK\jdk1.8.0_91\jre\lib\jsse.jar;F:\JDK\jdk1.8.0_91\jre\lib\management-agent.jar;F:\JDK\jdk1.8.0_91\jre\lib\plugin.jar;F:\JDK\jdk1.8.0_91\jre\lib\resources.jar;F:\JDK\jdk1.8.0_91\jre\lib\rt.jar;F:\myeclipseWorkSpace\thread-train\target\classes Join
Main Thread start
Thread 1 count is 0
Thread 1 count is 1
Main thread count is 0
Thread 1 count is 2
Main thread count is 1
Main thread count is 2
Thread 1 count is 3
Main thread count is 3
Thread 1 count is 4
Thread 1 count is 5
Main thread count is 4
Thread 1 count is 6
Main thread count is 5
Thread 1 count is 7
Main thread count is 6
Thread 1 count is 8
Main thread count is 7
Main thread count is 8
Thread 1 count is 9
Main thread count is 9
Thread 1 count is 10
Main thread count is 10
Thread 1 count is 11
Main thread count is 11
Thread 1 count is 12
Main thread count is 12
Thread 1 count is 13
Main thread count is 13
Thread 1 count is 14
Thread 1 count is 15
Main thread count is 14
Main thread count is 15
Thread 1 count is 16
Thread 1 count is 17
Thread 1 count is 18
Thread 1 count is 19
Thread 1 count is 20
Thread 1 count is 21
Thread 1 count is 22
Thread 1 count is 23
Thread 1 count is 24
Thread 1 count is 25
Thread 1 count is 26
Thread 1 count is 27
Thread 1 count is 28
Thread 1 count is 29
Thread 1 terminating.
Main thread count is 16
Main thread count is 17
Main thread count is 18
Main thread count is 19
Main thread count is 20
Main thread count is 21
Main thread count is 22
Main thread count is 23
Main thread count is 24
Main thread count is 25
Main thread count is 26
Main thread count is 27
Main thread count is 28
Main thread count is 29

Process finished with exit code 0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值