不可以不写拷贝构造及构造,因为如果不写,系统会默认生成public的形式的
单线程环境下是Ok的
thread A
thread B
为什么锁的代价过高
已经创建一个对象了
又来了两个线程,此时已经没有必要加锁了,因为此时是读操作了
读操作是不需要加锁的
写操作是需要加锁的
高并发:10W人同时在线,那么锁的代价就很高
双检查锁不可以用!!!!!
重叠if的意义:
如果两个线程都进来了,就又是线程不安全的
有漏洞:内存读写会出现reorder的情况:双检查锁的失效
reorder:
很有可能:编译器-先分配内存,再将内存给指针,再将调用构造器
赋值之后,指针就不是NULL了,然而此时指针还不可以用,对象状态是不对的,但却被第二个线程返回了,大BUG。
解决方法:
volatile