【问题标题】:Multiple thread calls to a singleton method effects local variables?对单例方法的多个线程调用会影响局部变量?
【发布时间】:2013-04-03 05:33:05
【问题描述】:

我创建了一个具有多个方法的类,并且这个类可以在任何时候只有一个实例,就像单例行为和没有任何实例变量的类一样。

现在我很困惑,如果对单个方法的多次调用会产生预期的结果,如果方法只有参数会受到多个线程的影响?
因为一旦分配了内存,方法就在堆栈中,然后线程同时调用该方法,结果是什么?

【问题讨论】:

  • 如果没有实例变量,那么一切都好。

标签: java memory-management methods


【解决方案1】:

每个线程都有自己的、独立的、私有的堆栈。当一个线程进入一个方法时,所有的参数和局部变量都在该线程的本地栈中,没有其他线程可以访问它。

因此,如果两个线程进入同一个方法,但是这个方法只访问它的参数和它的局部变量(并且两个线程中的参数并不指向同一个对象),那么一个线程的执行是不可能干涉的与对方的线程执行。它几乎就像两个独立的 java 进程。

【讨论】:

  • 如果方法也是静态的,对多个线程的方法调用显示相同的行为或任何意外结果?
  • 方法是否静态无关紧要。您可以将实例方法视为具有隐式 this 参数的静态方法,然后您可以以完全相同的方式推理静态方法和实例方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多