NameServ是rocketMQ的注册中心,保存所有Broker、Topic的元数据。Broker启动后会向nameserv发送心跳,nameserv也会定时检测broke...
NameServ是rocketMQ的注册中心,保存所有Broker、Topic的元数据。Broker启动后会向nameserv发送心跳,nameserv也会定时检测broke...
new的时候再虚拟机里面会有三个步骤
1、给instance分配一个内存地址
2、初始化Singleton对象。以及构造函数的一些参数
3、让singleton对象指向instance的地址(这个时候instance就不为null了)
那刚才说他不是原子操作意思就是说,他并不一定完全是这个顺序,那他也可能步骤132那当他先执行了3的时候,其实instance还是空。那如果这个时候刚好多线程又去new了,那这又线程不安全了。好,解决这个问题,能不能让他保证顺序的执行,在他没执行完这个步骤时,其他线程不能进来,violate这个修饰符,可以做这个事情。
你这里的解释有问题1、synchronized(Singleton.this)应该写成synchronized(Singleton.class),你那样编译都通不过2、“也可能步骤132“,不能解释另外一个线程能通过这个锁,是这样,当A线程分配了内存之后让singleton对象指向instance的地址,这时B线程判断 if (null == instance),不为null,直接return了,这时这个instance就是有问题的对象
单例模式平时工作开发中,对面做着个4年多的java开发。每次看完我的代码,都摇摇头,你这个设计台low B了,代码都拢在了一块儿。再这样的激发下,当然也感受到了代码架构的重要性,所以...
什么分布式系统
test nihao