今天我们给大家分享一些关于java线程安全面试题,毕竟java线程知识点是很重要的,是每个java人员必须掌握的,并且在面试中也是必考的,因此我们给大家分享一些这方面的面试题以及答案,希望能帮助大家!
1.如何在Java中实现线程?
在语言层面有两种方式。java.lang.Thread 类的实例就是一个线程但是它需要调用java.lang.Runnable接口来执行,由于线程类本身就是调用的Runnable接口所以你可以继承 java.lang.Thread 类或者直接调用Runnable接口来重写run()方法实现线程。
2.什么是线程安全?Vector是一个线程安全类吗?
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量 的值也和预期的是一样的,就是线程安全的。一个线程安全的计数器类的同一个实例对象在被多个线程使用的情况下也不会出现计算失误。很显然你可以将集合类分 成两组,线程安全和非线程安全的。Vector 是用同步方法来实现线程安全的, 而和它相似的ArrayList不是线程安全的。
3.Java中如何停止一个线程?
Java提供了很丰富的API但没有为停止线程提供API。JDK 1.0本来有一些像stop(), suspend() 和 resume()的控制方法但是由于潜在的死锁威胁因此在后续的JDK版本中他们被弃用了,之后Java API的设计者就没有提供一个兼容且线程安全的方法来停止一个线程。当run() 或者 call() 方法执行完的时候线程会自动结束,如果要手动结束一个线程,你可以用volatile 布尔变量来退出run()方法的循环或者是取消任务来中断线程。
4.有哪些方法可以让线程进入阻塞状态,然后又如何恢复线程到运行状态?
使线程进入阻塞状态的方法:
(1)调用sleep方法主动放弃所占用的处理器资源;
(2)调用了一个阻塞式的IO方法:如等待某个输入输出流的完成;
(3)线程试图得到一个锁,而该锁正在被其他线程调用;
(4)线程在等待某个通知(notify);
(5)调用suspend方法暂停了线程,暂停后的线程必须通过resume方法来恢复,容易造成死锁,一般不用;
恢复线程到运行状态:
(1)sleep方法的线程经过了指定的时间;
(2)阻塞式的IO方法已经返回;
(3)成功的获取到了试图得到的锁;
(4)线程正在等等某个通知时,其他线程发出了一个通知;
(5)调用了resume方法;
要想通过java面试,我们只有多刷题多积累,这样才能提高记忆,帮助大家顺利通关!最后大家如果想要了解更多java面试题知识,敬请关注奇Q工具网。
推荐阅读: