не потокобезопасен для Билла Пью Синглтона? - PullRequest
0 голосов
/ 25 сентября 2019

Я думал, что 'Thread safe' - это блокировка экземпляра, но написание тестового кода не дало желаемых результатов.

Требуемый результат должен быть квадратным, как этот.

singleton new instance
0 0 0 0 0 0 0 0 0 0 
2 2 2 2 2 2 2 2 2 2 
4 4 4 4 4 4 4 4 4 4 
1 1 1 1 1 1 1 1 1 1 
3 3 3 3 3 3 3 3 3 3 
6 6 6 6 6 6 6 6 6 6 
5 5 5 5 5 5 5 5 5 5 
8 8 8 8 8 8 8 8 8 8 
7 7 7 7 7 7 7 7 7 7 
9 9 9 9 9 9 9 9 9 9 

Это код, который я написал при тестировании.

public class main extends Thread{

    String name = "";

    public main(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        BillPughSingleton.getInstance().addNum(name);
    }

    public static void main(String[] args){
        for(int i=0; i< 10; i++)
            new main(i+"").start();
    }

}

public class BillPughSingleton {

    private BillPughSingleton() {}

    private static class BillPughSingletonHolder{
        private static BillPughSingleton INSTANCE = new BillPughSingleton();
        static {
            System.out.println("singleton new instance");
        }
    }

    public static BillPughSingleton getInstance() {
        return BillPughSingletonHolder.INSTANCE;
    }

    //Adding 'synchronized' to it result I want.
    public void addNum(String name) {
        for(int i=0; i<10;i ++)
            System.out.print(name+" ");

        System.out.println(); // \n
    }
}

Пожалуйста, дайте мне знать, если я неправильно понимаю 'Thread-safe'.Спасибо!

...