2016-03-06 69 views
0

“单个程序如何被多个客户端访问”?单个程序如何与多个客户端共享? (意味着多个客户端线程共享相同的对象吗?)

“是每个客户端使用程序生成的程序的任何副本”?

的问题太简单了,但还是有点混乱。 考虑一段伪代码如下─

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

所以,现在如果一个客户端试图访问这段代码的对象“S”将被创建。

问题在于是否该对象会为每个客户端(或客户端请求)谁访问码或该对象将在一生中创建一次被创建(装置上的代码的部署)?

我知道的servlet(或基于语言的任何其他容器),用于处理客户端的请求,但我问这是我们写信给被多个客户端消耗的计划。

+0

有一个程序被多个客户端访问的方法很多。你能提供关于程序/堆栈/体系结构的更多上下文吗? – Seth

+0

该问题以非常令人困惑的方式和方式超出其普遍接受的含义使用词语“程序”,“访问”,“客户端”,“复制”,“生成”,“客户请求”和“消费”看来作者不了解一些基本概念。没有很多猜测就不可能写出答案。 – fdreger

回答

1

为了理解这个概念,我想你会需要深入研究Java内存模型的细节。我认为这是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进程的上下文中提到这一点。

现在认为这个对象是不可变的对象。

+0

我想如果您阅读上面关于Java Memory Model的文章,您的问题将得到解答。 – Learner

+0

我读过你的文章,其中说,堆包含在Java应用程序中创建的所有对象,而不管该线程是否创建了该对象。所有对象和对象的成员变量都与对象本身一起存储在堆中。现在它缩小了我的问题,即是否会为每个线程创建对象“s”? (我认为它会为每个线程创建)。 – Query

+0

所有分配的对象只能位于堆中,而不能位于堆栈中。线程仅将对象的引用保存为堆栈中的局部变量。 – Learner

相关问题