线程不安全的应对措施

来源:互联网 发布:白骑士大数据电话 编辑:程序博客网 时间:2024/05/16 14:00

在应用程序中,线程不安全一般都是由于共享内容造成的。例如java中的有状态的单例、静态被共享使用,就可能出现线程不同步,产生脏读写。

对应措施总结如下:

1、不管是单例还是静态,尽量不要保存状态,也就是内部不要保存数据,只提供常量和方法。例如去掉setter,设置私有,使用final实现不变性。

2、如果单例对象存在状态,则通过克隆或者new来使用其副本。

3、使用ThreadLocal封装线程不安全的对象,这样每个线程使用的都是副本,但是牺牲一定的空间。

4、自己实现线程同步器,协调各个线程,难度较大,适用性差,还会造成性能下降。

5、在不使用上述的情况下,还可以:

保证线程不安全的对象只读。

1、在方法中使用局部变量。

2、使用future模式和callable。


此外还有一些是运行机制造成的,如指令重排序,非原子操作,锁机制等。

原创粉丝点击