-
说说isInterrupted()方法和interrupted()方法?
答:可参考本篇博客【isInterrupted()方法和interrupted()方法简析】。 -
你是如何调用wait()方法的?使用if块还是循环?为什么?
答:wait()方法应该在循环调用,因为当线程获取到CPU开始执行的时候,其他条件可能还没有满足,所以在处理前,循环检测条件是否满足会更好。 -
在线程中你怎么处理不可捕捉异常?
答:使用Thread.UncaughtExceptionHandler,它是java SE5中新加的接口,它允许我们在每一个Thread对象上添加一个异常处理器。 -
什么时候应该使用可重入锁?
答:递归调用或者线程调用同一对象其它用synchronized修饰的方法。 -
如何确保main()方法所在的线程是Java程序最后结束的线程?
答:join()方法或者CountDownLatch类。 -
什么是Java Timer类?
答:java.util.Timer是一个工具类,可以用于安排一个线程在未来的某个特定时间执行。Timer类可以用安排一次性任务或者周期任务。 -
如何创建一个有特定时间间隔的任务?
答:使用java.util.TimerTask类,它是一个实现了Runnable接口的抽象类,我们需要去继承这个类来创建业务需要的定时任务并使用Timer去安排它的执行。 -
什么是死锁(Deadlock)?
答:两个或两个以上的线程互相等待对方的资源,而这些线程又需要得到对方的资源后,才能释放自己的资源,造成了这些线程永远阻塞的现象,就是死锁。 -
如何分析和避免死锁?
答:先通过jstack拿到应用程序死锁的线程转储文件,然后要注意那些被阻塞的线程,以及等待锁定的资源,因为每个资源都有一个惟一的ID,所以以此为依据可以找到哪些线程已经持有了对象上的锁 。 -
同步方法和同步块,哪个是更好的选择?
答:要是用同步方法,那么锁住的就是一整个对象了,对象的其他同步方法都需要互相等待。而使用同步块,锁的范围可以更小,而且可以只针对锁住某个我们定义的对象,灵活性也更高。
java并发面试题(八)
猜你喜欢
转载自blog.csdn.net/weixin_38106322/article/details/104552136
今日推荐
周排行