Java中的线程局部变量与局部变量
我们不能使用线程安全的局部变量而不是线程局部变量吗。Java中的线程局部变量与局部变量,java,multithreading,Java,Multithreading,我们不能使用线程安全的局部变量而不是线程局部变量吗。 以及使用ThreadLocal的位置。请引用一些实际应用的例子 线程局部变量在不同的线程中具有不同的实例。这允许每个线程拥有自己的变量视图,该视图独立于其他线程看到的内容。“普通”局部变量是单个实例,当以线程安全方式访问时,所有线程中的值都相同。线程局部变量在不同线程中具有不同的实例。这允许每个线程拥有自己的变量视图,该视图独立于其他线程看到的内容。“Plain”局部变量是单个实例,当以线程安全的方式访问时,所有线程中的值都相同。一个典型的例
以及使用ThreadLocal的位置。请引用一些实际应用的例子 线程局部变量在不同的线程中具有不同的实例。这允许每个线程拥有自己的变量视图,该视图独立于其他线程看到的内容。“普通”局部变量是单个实例,当以线程安全方式访问时,所有线程中的值都相同。线程局部变量在不同线程中具有不同的实例。这允许每个线程拥有自己的变量视图,该视图独立于其他线程看到的内容。“Plain”局部变量是单个实例,当以线程安全的方式访问时,所有线程中的值都相同。一个典型的例子是
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();
}
前者效率更高,而后者更易于阅读和推理。一个典型的例子是
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();
}
前者效率更高,而后者更易于阅读和推理。局部变量只能在声明它的函数或块中使用,并且当函数返回或块退出时它就不再存在
当您需要静态数据,但希望每个线程都有自己的副本时,可以使用
ThreadLocal
对象,该对象通常从static
变量或singleton对象的实例变量引用。局部变量只能在声明它的函数或块中使用,当函数返回或块退出时,它就不再存在
当您需要静态数据,但希望每个线程都有自己的副本时,您可以使用
ThreadLocal
对象,通常从static
变量或单例对象的实例变量引用该对象。与其发布一些随机示例,不如发布您的示例?有时您可能可以。但是它们不是同一件事,所以这取决于你在具体案例中需要的行为。与其我们发布一些随机的例子,不如你发布你的例子?有时候你可能会。但是它们不是同一件事,所以这取决于您在特定情况下需要的行为。