转自https://www.cnblogs.com/huajiezh/p/5790942.html 

1)现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?

这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单,可以用join方法实现。

不错的链接讲解  链接x=https://blog.csdn.net/u010983881/article/details/80257703

有趣的是,第一个运行结果大概率是这样的。说明没主线程会抢吗,。,

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

15个顶级多线程面试题及答案,Java多线程学习之wait、notify/notifyAll 详解 随笔 第1张

第二个运行结果是这样的

 

 

15个顶级多线程面试题及答案,Java多线程学习之wait、notify/notifyAll 详解 随笔 第2张

猜想是这样的:指令做了重新排序,或者看看源码去,现在能力弱鸡,还是先别看。以上两张图说明会把主线程先运行完再去运行子线程的东西。从下面的运行看,是和主线程抢的太少了,线程多的时候,嘿嘿主线程就多挂会把。

而join会把当前正在被调用的线程阻塞直到调用的线程运行完毕。当设置了join(time)时间的时候,time过了,不管threadA有没有执行完都会回到主线程.如下,上面join(500)的结果

15个顶级多线程面试题及答案,Java多线程学习之wait、notify/notifyAll 详解 随笔 第3张

所以T1-->T2-->T3,  

15个顶级多线程面试题及答案,Java多线程学习之wait、notify/notifyAll 详解 随笔 第4张

 15个顶级多线程面试题及答案,Java多线程学习之wait、notify/notifyAll 详解 随笔 第5张

 

15个顶级多线程面试题及答案,Java多线程学习之wait、notify/notifyAll 详解 随笔 第6张

 

 

 

 

 

 

右图是代码,开始是无序执行的,解开注释代码后,就是有序的了。join拿到主线程,让自己先运行完,然后回到主线程。  

 外记,创建线程用的是链接中显示创建,阿里给的提示 

15个顶级多线程面试题及答案,Java多线程学习之wait、notify/notifyAll 详解 随笔 第7张

 

2 在Java中Lock接口比synchronized块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?

Java多线程学习之wait、notify/notifyAll 详解

http://www.cnblogs.com/moongeek/p/7631447.html

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄