import javax.management.relation.RelationNotFoundException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class Lazy {
    private  volatile static  Lazy lazy;

    public Lazy() {
        if(lazy != null)
        {
            throw new RuntimeException("no reflect!");
        }

    }

    public  static Lazy getInstance(){
        if(lazy == null){
            synchronized (Lazy.class){
                if(lazy == null)
                lazy = new Lazy();
            }
        }
        return lazy;
    }

    public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
//        new Thread(new Runnable() {
//            @Override
//            public void run() {
//                Lazy instance1 = Lazy.getInstance();
//                System.out.println(instance1.hashCode());
//            }
//        }).start();

//        Lazy instance1 = declaredConstructor.newInstance();
        for (int i = 0; i < 10; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {

                    try {
                        Constructor<Lazy>  declaredConstructor = Lazy.class.getDeclaredConstructor(null);

                        declaredConstructor.setAccessible(true);
                        Lazy instance2 = declaredConstructor.newInstance();
                        System.out.println(instance2.hashCode());
                    } catch (InstantiationException | InvocationTargetException | IllegalAccessException | NoSuchMethodException e) {
                        e.printStackTrace();
                    } finally {
                        System.out.println("finn");
                    }

                }

            }).start();
        }
    }
}