【发布时间】:2018-08-24 11:56:36
【问题描述】:
我想了解静态上下文在多线程环境中的工作原理。 如果你在一个类中有一个静态方法,可以说“ContainerClass.notSafeStaticMethod();”并且你同时从不同的线程调用它。
方法内的变量是否共享?
public class ContainerClass{
public static String notSafeStaticMethod(String stringParameter) {
String localString = stringParameter + "1";
localString += "2";
localString += "3";
return localString;
}
}
然后两个线程同时调用它:
ContainerClass.notSafeStaticMethod( "first Call"); /*Thread 1 is executing*/
ContainerClass.notSafeStaticMethod( "Second Call"); /*Thread 2 starts executing before thread 1 finishes*/
函数的内部状态会发生什么?还有,接收到的参数值会怎样?
每个值会是一个不同的值,还是它们共享相同的内存?
根据我的理解,静态变量不在堆栈中,而是在堆中,所以它们应该共享它们,因此代码不会是线程安全的,对吗?
【问题讨论】:
标签: java multithreading concurrency static