所以我知道Servlet只有一个实例,并且Servlet的方法由不同的线程调用。我想理解这个概念,但我很难...
想象一下,这个课有一个方法:
public class A{
public void foo(Bar bar){
}
}
如何有一个A的单个对象,但是它会被不同的线程调用?有什么帮助吗?
答案 0 :(得分:2)
这是一个使用您的示例说明概念的程序:
// 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()
创建五个线程,每个线程在foo
的共享实例上调用方法A
。
您可以稍微使用此演示 - 例如,尝试更改A
以计算foo
的调用次数,并从几百个线程运行它。您会发现,如果只是增加计数器,就会得到不一致的结果,并且需要使用同步或原子整数来正确计数。