«мы синхронизируем метод глобального доступа, чтобы только один поток мог одновременно выполнять метод getInstance», не используя ключевое слово синхронизированного кода ниже, уже действующее как потокобезопасное.
Car.java
public class Car {
private static Car car;
private Car() {
// TODO Auto-generated constructor stub
}
public static Car getInstance(){
if(car==null){
car=new Car();
}
return car;
}
}
Test.java
public class Test {
public static void main(String[] args) {
Thread t1=new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+" Running");
System.out.println(Car.getInstance().hashCode());
System.out.println(Thread.currentThread().getName()+" Finishing");
}
});
t1.start();
Thread t2=new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+" Running");
System.out.println(Car.getInstance().hashCode());
System.out.println(Thread.currentThread().getName()+" Finishing");
}
});
t2.start();
Thread t3=new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+" Running");
System.out.println(Car.getInstance().hashCode());
System.out.println(Thread.currentThread().getName()+" Finishing");
}
});
t3.start();
}
}
выход
Thread-0 Running
1828451009
Thread-0 Finishing
Thread-1 Running
1828451009
Thread-1 Finishing
Thread-2 Running
1828451009
Thread-2 Finishing
Без использования синхронизированного метода хэш-код одинаков во всех случаях потока, как?