Java应用程序服务器执行堆栈线程关联

Java应用程序服务器执行堆栈线程关联,java,multithreading,threadpool,application-server,Java,Multithreading,Threadpool,Application Server,假设我们在Tomcat或其他应用服务器下部署了Spring启动应用程序 假设应用程序正在运行,并且有一些方法执行堆栈。App Server是否可以在App Server内置线程池中的线程之间传输执行堆栈 也就是说,线程Id是否会在应用程序的同一执行堆栈(不是内部应用程序服务器堆栈)内更改?考虑例子: class FooBar { fooBar() { foo() bar() } foo() {} bar() {} } 当fooBar()在线程ID 1中启

假设我们在Tomcat或其他应用服务器下部署了Spring启动应用程序

假设应用程序正在运行,并且有一些方法执行堆栈。App Server是否可以在App Server内置线程池中的线程之间传输执行堆栈

也就是说,线程Id是否会在应用程序的同一执行堆栈(不是内部应用程序服务器堆栈)内更改?考虑例子:

class FooBar {

  fooBar() {
    foo()
    bar()
  }

  foo() {}

  bar() {}

}
当fooBar()在线程ID 1中启动时,应用服务器是否会使方法bar()在线程ID 1中运行,而方法foo()在线程ID 2中运行

警告:这是一个棘手的问题,应用程序服务器会做出与JVM工作原理的正常理解相反的意外行为。

无法更改正在运行(或被阻止)代码的线程


PS:虽然应用程序服务器有时会做一些棘手的事情,但它们无法阻止JVM约束(除非它们不提供自己的JVM非标准行为)。

为什么它会在自己的线程中启动该方法,您会明确地一个接一个地调用它们,因此它们将驻留在同一个线程中。更新:请忽略此答案,见下文。我不启动/停止任何线程,线程由App Server独家管理。对不起,我误读了你的回复。回答您的问题:可能是由于负载平衡的原因。谢谢您的回复@talex!