我们不能使用线程安全的局部变量来代替ThreadLocal吗?以及使用ThreadLocal的地方。请列举一些实际应用的例子。
发布于 2015-03-01 18:47:36
一个典型的例子是SimpleDateFormat,它不是线程安全的。在多线程上下文中,两个线程安全选项除其他外包括:
private static ThreadLocal<SimpleDateFormat> fmtHolder = new ThreadLocal<SimpleDateFormat>() {
@Override protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("dd/MM/yyyy");
}
};
private void method() {
SimpleDateFormat fmt = fmtHolder.get();
}或者使用本地实例:
private void method() {
SimpleDateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");
}前者可以更有效率,而后者则更容易阅读和推理。
发布于 2015-03-02 19:26:40
局部变量只能在声明它的函数或块中使用,并且它在函数返回或块退出时停止存在。
当您想要静态数据时,可以使用ThreadLocal对象,通常是从static变量或单例对象的实例变量引用,但希望每个线程都有自己的副本。
发布于 2015-03-01 18:46:29
线程局部变量在不同的线程中有不同的实例。这使得每个线程都可以拥有独立于其他线程所看到的变量的视图。“平原”局部变量是一个实例,当以线程安全的方式访问时,在所有线程中都具有相同的值。
https://stackoverflow.com/questions/28797462
复制相似问题