请问Java提供了哪些常用的
线程安全的类,在一个可变类中采用什么措施可以降低因保证
线程安全而损失的并发性能。
答:所谓的线程安全就是不需要手动添加
同步方法或者同步块来保证线程的同步,一般线程安全类都包含了同步的方法或者同步代码块,所以耗费了很多的系统性能。在非必要的情况下,一般尽量避免使用线程安全类,以提高系统的性能。
Java中提供常用的线程安全类有:
(1)Vector(向量类)
(2)Hashtable类
(3)String类,由于这个类是不可变类,所以此类也肯定是线程安全的。
此外,常用的非线程安全类有:
(1)ArrayList类
(2)HashMap类
(3)HashSet类
可变类的线程安全往往以降低并发性能为代价,为了减小这一负面影响,可以采取以下措施:
第一,只对可能导致资源竞争的代码进行同步。那些不改变类状态的方法可以不必加上synchronized
关键字来保证其同步。
第二,如果一个可变类有两种运行环境——单线程运行环境和多线程运行环境,那么可以为这个类提供两种实现,在单线程运行环境中使用未采取同步的类的实现,在多线程运行环境中使用采取同步的类的实现。