Java 一个对象只启动一次但被不同线程调用意味着什么?(我指的是Servlets…)
所以我知道只有一个Servlet实例,Servlet的方法由不同的线程调用。。我想理解这个概念,但我很难理解 假设我有一个类和一个方法:Java 一个对象只启动一次但被不同线程调用意味着什么?(我指的是Servlets…),java,multithreading,servlets,Java,Multithreading,Servlets,所以我知道只有一个Servlet实例,Servlet的方法由不同的线程调用。。我想理解这个概念,但我很难理解 假设我有一个类和一个方法: public class A{ public void foo(Bar bar){ } } 如何可以有一个单一的对象,但它将被不同的线程调用?有什么帮助吗?这里有一个程序,用你的例子说明了这个概念: // Here is your class public class A { public void foo(Bar bar){
public class A{
public void foo(Bar bar){
}
}
如何可以有一个单一的对象,但它将被不同的线程调用?有什么帮助吗?这里有一个程序,用你的例子说明了这个概念:
// Here is your class
public class A {
public void foo(Bar bar){
System.out.println(bar);
}
}
// Here is a class with a main that runs foo(Bar) on five threads
public class Demo extends Thread {
static A sharedA = new A();
Bar myBar = new Bar();
public void run() {
sharedA.foo(myBar);
}
public static void main(String args[]) {
for (int i = 0 ; i != 5 ; i++) {
(new Demo()).start();
}
}
}
上面,只有一个A
实例,因为sharedA
是static
main()
创建五个线程,每个线程在a
的共享实例上调用一个方法foo
您可以稍微玩一下这个演示—例如,尝试更改
a
来计算foo
的调用,并从几百个线程运行它。您会发现,如果只是增加计数器,结果会不一致,需要使用同步或原子整数来正确计数。很难理解您需要什么帮助。有一个物体,A。它存在于记忆的某个地方。然后很多线程在对象A上执行foo
函数。有什么让人困惑的?谢谢,回答得很好。这就是Servlet的基本工作方式,对吗?@KorayTugay嗯,不完全是这样-访问Servlet的线程是由传入的请求启动的。此外,Servlet对象可能不一定存储在静态变量中。但共享是一样的:Servlet对象只在应用程序启动时创建一次,然后所有请求从不同线程调用相同的方法。