java多线程死锁 分享几道Java线程面试题(4)

电脑杂谈  发布时间:2019-01-15 20:05:31  来源:网络整理

18)什么是ThreadLocal变量?

ThreadLocal是Java里一种特殊的变量。java多线程死锁每个线程都有一个ThreadLocal就是每个线程都拥有了自己独立的一个变量,竞争条件被彻底消除了。它是为创建代价高昂的对象获取线程安全的好方法,比如你可以用ThreadLocal让SimpleDateFormat变成线程安全的,因为那个类创建代价高昂且每次调用都需要创建不同的实例所以不值得在局部范围使用它,如果为每个线程提供一个自己独有的变量拷贝,将大大提高效率。首先,通过复用减少了代价高昂的对象的创建个数。其次,你在没有使用高代价的同步或者不变性的情况下获得了线程安全。线程局部变量的另一个不错的例子是ThreadLocalRandom类,它在多线程环境中减少了创建代价高昂的Random对象的个数。查看答案了解更多。

19)什么是FutureTask?

当a线程调用anyobject对象加入synchronized关键字的x方法时,a线程就获得了x方法锁,更准确地讲,是获得了时象的锁,所以其他线程必须等a线程执行完毕才可以调用x方法,但b线程可以随意调用其他的非synchronized同步方法。

一个futuretask对象可以对调用了callable和runnable的对象进行包装,由于futuretask也是调用了runnable接口所以它可以提交给executor来执行。

(2)可以理解为调用jdk类中的静态方法。

futuretask包装了callable和runnable接口对象,提供了对future接口的基本实现,开始、取消计算、查询结果是否完成、获取计算结果。

20)Java中interrupted 和 isInterruptedd方法的区别?

interrupted() 和isInterrupted()的主要区别是前者会将中断状态清除而后者不会。用来查询其它线程的中断状态且不会改变中断状态标识。简单的说就是任何抛出InterruptedException异常的方法都会将中断状态清零。无论如何,一个线程的中断状态有有可能被其它线程调用中断来改变。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-91495-4.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...