如何与多个客户共享一个程序? (意味着多个客户端线程共享相同的对象?)

时间:2016-03-06 16:09:08

标签: java php multithreading jvm

"多个客户如何访问单个程序"?

"为每个客户生成的程序副本是否都使用该程序"?

问题太简单了,但仍然有点令人困惑。 考虑下面的一段伪代码 -

Class Some {
// Some code
}
main(){
Some s= new Some();
}

所以,现在,如果客户试图访问这段代码,那么对象就是'将被创建。

问题是,是否将为访问代码的每个客户端(或客户端请求)创建此对象,否则此对象将在生命周期中创建一次(意味着部署代码)?

我知道servlet(或任何其他基于语言的容器)用于处理客户端请求,但我问的是我们编写的程序被多个客户端使用。

1 个答案:

答案 0 :(得分:1)

为了理解这个概念,我认为你需要深入研究Java Memory Model的细节。我想这是link is a great resource for beginners

Class Some {
  // Some code
}
main(){
  Some s= new Some();
}
  

问题是,是否将为访问代码的每个客户端(或客户端请求)创建此对象,否则此对象将在生命周期中创建一次(意味着部署代码)?

当你传递/访问s时,传递s的值,这是对Some对象的引用。 (s本身是通过值传递的),它不会改变所引用的对象。 Java严格按值传递

当您使用s.someDataMember更改该对象中的值时,另一个客户端再次查看someDataMember的值将会看到更新的值。

基本上,除非你真的要求,否则Java不会复制对象。现在我在相同的JVM进程的上下文中引用它。

现在考虑这个对象是一个不可变对象。