多线程的一点小结
最近看多线程比较多,对于volatile,syn,CAS,JMM模型(主内存,工作内存)这些概念有些理解。volatile,syn工作机制等。
以及对于多线程中可见性,原子性的理解。
随着对这些基础的掌握和理解,我觉得自己对于多线程方面的能力有一定的提升。
可见性的问题上,volatile是怎么解决可见性的。而syn又是如何解决可见性的。
对于原子性的问题上,syn又是怎么解决的。而syn是悲观锁,在处理共享数据问题的时候,效率可能比较差。因为当数据被修改的时候,其他的线程不能对数据进行读操作。
由此就引申出了CAS锁(乐观锁)这个机制。
同时,在练习的过程中,也踩了一些坑。也能够基于两种方式去实现小demo。
对于实现Runable接口来说,它适合处理共享数据,因为多个线程可以执行同一个Runable实现类中的run方法,且只有一个该实例化对象,那么它里面的属性也是唯一的。
而对于继承Thread类的方式,可以采用静态变量的方式来实现共享数据。
- CAS锁实现逻辑:
V内存地址 A旧值 B期望值
线程1在修改共享变量的时候,会拿A和内存地址V上的实际值比较,如果相等,则将A修改为B。
如果不相等,则拿地址V上的值来更新A值,然后再次修改,执行上面这个逻辑。
-- 总结:更新的时候去判断A和V上的值是否相等。在数据库的体现就是条件:where stock = A ,数据库的值就是V
库存数量为A这个值那么就执行sql更新语句