0
点赞
收藏
分享

微信扫一扫

Java有哪些保证原子性的方法?如何保证多线程下i++ 结果正确?什么是原子操作类?

使用循环原子类,例如AtomicInteger,实现i++原子操作

使用juc包下的锁,如ReentrantLock ,对i++操作加锁lock.lock()来实现原子性

使用synchronized,对i++操作加锁

原子操作类

当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值,比如变量i=1,A线程更新i+1,B线程也更新i+1,经过两个线程操作之后可能i不等于3,而是等于2。因为A和B线程在更新变量i的时候拿到的i都是1,这就是线程不安全的更新操作,一般我们会使用synchronized来解决这个问题,synchronized会保证多线程不会同时更新变量i。

其实除此之外,还有更轻量级的选择,Java从JDK 1.5开始提供了java.util.concurrent.atomic包,这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。

因为变量的类型有很多种,所以在Atomic包里一共提供了13个类,属于4种类型的原子更新方式,分别是原子更新基本类型、原子更新数组、原子更新引用和原子更新属性(字段)。

Java有哪些保证原子性的方法?如何保证多线程下i++ 结果正确?什么是原子操作类?_原子操作

举报

相关推荐

0 条评论