并发安全

怎么保证多线程安全?
synchronize关键字,volatile关键字可见性,lock接口reentrantlock类锁,本地线程threadlocal
Java中有那些常用的锁?
synchronize关键字内置锁,reentrantlock锁,读写锁readwritelock,乐观锁(cas),悲观锁(synchronize,reentrantlock都属于悲观锁)
synchronize内置锁可用于方法,代码块中
reentrantlock比synchronize提供更多的灵活锁操作,尝试锁,中断锁,定时锁等,synchronize能用的地方reentrantlock都可用。
synchronize里边有偏向锁,轻量锁,重量锁,当线程在之前已经获取过偏向锁的时候,再次获取的时候直接对比线程ID即可,如果是之前获取过的直接获取,偏向于该线程。当没有获取到偏向锁的时候就会膨胀为轻量锁,通过自旋不断尝试获取锁,当轻量锁还获取不到的时候就会膨胀为重量锁,进行阻塞等待。
reentrantlock是实现lock接口实现的。
reentrantlock有公平锁和非公平锁。在reentrantlock内部是AQS抽象类,通过子类去继承AQS去实现各类锁。
synchronize,reentrantlock都支持可重入。
本地线程threadlocal,原理是底层有一个threadlocalmap,key存储threadlocal,value存储值,作用是线程隔离,降低耦合度,性能优势。
cas的缺点是ABA的问题,自旋时间过长消耗CPU。
voliatle可见性,当线程修改voliatle修饰的共享变量的时,其他线程能获取到最新值。
全部评论

相关推荐

明天不下雨了_人机版:让我们大声的说出来:以前的未来就是现在
点赞 评论 收藏
分享
评论
2
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务