一个对象被启动一次但被不同的线程调用是什么意思? (我的意思是Servlets ..)

时间:2014-04-27 11:25:31

标签: java multithreading servlets

所以我知道Servlet只有一个实例,并且Servlet的方法由不同的线程调用。我想理解这个概念,但我很难...

想象一下,这个课有一个方法:

public class A{

    public void foo(Bar bar){
    }

}

如何有一个A的单个对象,但是它会被不同的线程调用?有什么帮助吗?

1 个答案:

答案 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的一个实例,因为sharedAstaticmain()创建五个线程,每个线程在foo的共享实例上调用方法A

您可以稍微使用此演示 - 例如,尝试更改A以计算foo的调用次数,并从几百个线程运行它。您会发现,如果只是增加计数器,就会得到不一致的结果,并且需要使用同步或原子整数来正确计数。