Java基础---多线程中的小知识点:join()方法

来源:互联网 发布:nginx 限制ip访问目录 编辑:程序博客网 时间:2024/06/01 09:54

    首先:要明确join() 方法的作用:让“主线程”等待“子线程”结束之后才能继续运行。

记着是主线程!!!你可以理解为:“父”执行调用到“子”,并不一定非得是main方法,而是调用到“子”线程的“父线程”才是主线程。

    接着看代码:

class Join implements Runnable{public void run(){for(int x=0; x<70; x++){System.out.println(Thread.currentThread().getName()+"....."+x);}}}class JoinDemo {        public static void main(String[] args) throws Exception        {                Join j = new Join();                Thread t1 = new Thread(j);                Thread t2 = new Thread(j);                t1.start();                t2.start();                t1.join();                for (int x=0;x<80 ;x++ )                {                        System.out.println("main______"+x);                }        }}

    此时,一共三个线程(主线程,t1,t2),cpu资源在 t2 手里。除非下一刻main(主线程)抢到执行权,否则 t1 或者 t2 会交替执行也可能 t2继续保持执行权。假设主线程(你的例子里是main方法)方法抢到执行权执行到 t1.join();主线程就开始等待,直到t1执行的停止(此时只有 t1 和 t2 在抢夺执行权);此刻主线程不管t2如何,只要 t1 一旦停止执行,它就和 t1、t2 再一起抢夺执行权,此时这个 join()方法也就执行过去了,剩下的时间就是三个线程相互抢了(因为默认优先级都是5,不存在谁抢的更多,多运行几次就知道了)。所以此刻不关 t2 它什么事。

 

1 0
原创粉丝点击