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

    首先:要明确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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值