我有一个普通的类,设计为由单个线程访问,我想让它thread-safe
这么多线程可以同时使用单个实例。我会创建一些类级别的方法和变量,并使用locks
使它们成为thread-safe
。此外,仅使用局部变量的方法是安全的(每个线程都有它的堆栈)。
我的问题是关于旧班级的properties
或更常见的non-static
变量。我可以简单地使用ThreadLocal<T>
并且每个线程都拥有自己的properties
集合吗?我肯定会在locks
中使用thread-safety
和其他setters
个问题(我认为getters
是安全的)。
ThreadLocal<T>
性能杀手?
答案 0 :(得分:2)
volatile
将防止过时读取,并且对于基元来说很好,但volatile
不会使访问成为原子。
java.util.concurrent
包中有很多类可能会帮助你。编写线程安全的代码很棘手,所以我建议你写一本关于这个主题的好书。 Brian Goetz的“实践中的Java并发”非常好。
答案 1 :(得分:1)
那不是线程本地人的用途。它们适用于每个线程都有自己的数据的情况。
在您的情况下,我建议您将字段类型更改为Map<Object, Object>
并使用Collections.synchronizedMap
来确保其线程安全。