15个顶级多线程面试题及答案,Java多线程学习之wait、notify/notifyAll 详解
转自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实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。第二个运行结果是这样的
猜想是这样的:指令做了重新排序,或者看看源码去,现在能力弱鸡,还是先别看。以上两张图说明会把主线程先运行完再去运行子线程的东西。从下面的运行看,是和主线程抢的太少了,线程多的时候,嘿嘿主线程就多挂会把。
而join会把当前正在被调用的线程阻塞直到调用的线程运行完毕。当设置了join(time)时间的时候,time过了,不管threadA有没有执行完都会回到主线程.如下,上面join(500)的结果
所以T1-->T2-->T3,
右图是代码,开始是无序执行的,解开注释代码后,就是有序的了。join拿到主线程,让自己先运行完,然后回到主线程。
外记,创建线程用的是链接中显示创建,阿里给的提示
2 在Java中Lock接口比synchronized块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?
Java多线程学习之wait、notify/notifyAll 详解
http://www.cnblogs.com/moongeek/p/7631447.html

更多精彩