Поэтому я знаю, что есть только один экземпляр сервлета, и методы сервлетов вызываются разными потоками. Я хочу понять эту концепцию, но мне тяжело.
Представьте, что у меня есть этот класс одним способом:
public class A{
public void foo(Bar bar){
}
}
Как может быть один объект A, но он будет вызываться разными потоками? Любая помощь?
Вот программа, которая иллюстрирует концепцию, используя ваш пример:
// 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
и запустить его из нескольких сотен потоков. Вы обнаружите, что если вы просто увеличиваете счетчик, вы получаете противоречивые результаты, и вам нужно использовать синхронизацию или атомное целое, чтобы правильно подсчитывать.
foo
для объекта A. Что смущает?