日期:2014-05-20  浏览次数:20550 次

Java面试问题之四十一
请问Java提供了哪些常用的线程安全的类,在一个可变类中采用什么措施可以降低因保证线程安全而损失的并发性能。

答:所谓的线程安全就是不需要手动添加同步方法或者同步块来保证线程的同步,一般线程安全类都包含了同步的方法或者同步代码块,所以耗费了很多的系统性能。在非必要的情况下,一般尽量避免使用线程安全类,以提高系统的性能。

Java中提供常用的线程安全类有:
(1)Vector(向量类)
(2)Hashtable类
(3)String类,由于这个类是不可变类,所以此类也肯定是线程安全的。
此外,常用的非线程安全类有:
(1)ArrayList类
(2)HashMap类
(3)HashSet类

可变类的线程安全往往以降低并发性能为代价,为了减小这一负面影响,可以采取以下措施:
第一,只对可能导致资源竞争的代码进行同步。那些不改变类状态的方法可以不必加上synchronized关键字来保证其同步。

第二,如果一个可变类有两种运行环境——单线程运行环境和多线程运行环境,那么可以为这个类提供两种实现,在单线程运行环境中使用未采取同步的类的实现,在多线程运行环境中使用采取同步的类的实现。