volatile不是原子量
|
yining<ianynchen@qq.com> 下午 11:43:02
volatile使用的是内存屏障
|
yining<ianynchen@qq.com> 下午 11:43:20
只能保证在一个线程写,多个线程读的情况下的一致性
|
yining<ianynchen@qq.com> 下午 11:43:44
真正的原子量应该是用的自旋锁
|
yining<ianynchen@qq.com> 下午 11:44:14
自旋锁没有到内核态的转换,所以还算比较快。mutex就是要转内核态了
volatile 会在 CAS 下存在安全问题
但是如果只有一个线程写,多个线程读,就不会有事请
所以disruptor推荐的模式就是一个producer,多个consumer。实际上就是一个写,多个读,这样可以利用volatile把性能最大化
你把生产看成是上一级的输出+本级输入,消费看成是逻辑处理,那么实际上就是一段子程序啊
慢慢来,有时候换个角度,比如去看C/C++的多线程的东西,对理解java的会有帮助
|