java - 线程局部变量的副本

标签 java multithreading

线程有单独的局部变量副本。我有一个创建哈希表对象的方法。两个不同的线程是否会有哈希表对象的两个不同副本?然后哈希表对象被传递给其他方法。

示例方法:

public void exampleMethod(String a,String b, String c)
{

   final Hashtable<String,String> parameterMap=new Hashtable<String,String>();
   parameterMap.put("key1",a);
   parameterMap.put("key2",b);
   parameterMap.put("key3",c);

   pqrsObject.takeRequest(parameterMap);

}

最佳答案

示例中的哈希表是一个局部变量,将为每次调用该方法创建。

那是因为每次你调用你的函数时

final Hashtable<String,String> parameterMap=new Hashtable<String,String>();

被调用,创建一个新的 hashtable 并将其放入 parameterMap 中。我不知道您需要 hashtable 的用途,但如果您在方法之外需要它,您可能想以其他方式在类上创建它

现在回答你的问题:

Threads have separate copy of local variables

嗯,不仅仅是线程。局部变量有一个减速范围。当您超出范围(在本例中为函数)时,局部变量将被删除。下一次调用将创建新变量,这意味着对函数的每次调用都会有不同的局部变量,即使它们的值相同

Will there be two different copies of hashtable objects for two different threads ?

我想你现在答案已经很清楚了,是的,不同的线程会有不同的哈希表副本

关于java - 线程局部变量的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26757594/

相关文章:

java - 重启 RabbitMQ 主节点时 SimpleMessageListenerContainer 停止从 RabbitMQ 消费

在 Weblogic 12c 中运行 Fabric-sdk-java 时出现 java.lang.NoSuchMethodError : com. google.common.util.concurrent.MoreExecutors.platformThreadFactory()

java - IKVM.NET : ikvmstub chokes on mscorelib version issue

java - 线程 : How to put a check inside Thread Consumer for Data reciving check

java - 将多个 WSDL 与 Axis2 wsdl2code Maven 插件一起使用

java - Jersey REST 客户端 - 将自定义 MediaType 视为 MediaType.APPLICATION_JSON

java - 如何使用 Stream Java 8 并行化 Java 程序

c++ - 可以安全共享指针数据的多线程库?

multithreading - 调用 DetachCurrentThread 后崩溃

java - 在 Java SWT 中将绘图线程化到 Canvas 上