多线程执行顺序问题
1个回答
展开全部
【问题】 请解释下以下线程的执行顺序
【解释】
结果为
或
主线程启动了两个线程,由main线程生成了一个thread线程,两个线程虽然没有什么关联关系,但是新线程的启动肯定需要时间,虽然时间很短但是没有main线程直接继续运行来的快,所以是main线程优先进入了m2方法,由于m2方法是synchronized方法,即使thread线程初始化完成了,也要等待锁释放,等main线程的tt.m2();执行完成后,thread线程才可以执行。这时两个线程就并发执行了,如果thread执行的快,就会输出“1000”,否则,就会输出“2000”。但是由于thread线程因为等待了5秒,最后输出的肯定是“b=1000”。
其实就一句话:线程同步问题!
两个线程要是不进行同步,其中指令的执行顺序是不可预期的!也就是说:结果可能与你预期相同,也可能不同,同或不同,都属于概率事件!
具体而言:你这里用的synchronized关键字,只保证了两个方法不会同时执行,但却无法保证二者到底谁先执行!
从设计者的角度而言,如果两个事件需要顺序发生,那么一般不会将其分派到两个不同线程中执行!否则,需要的同步机制是比较复杂的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询