Java原子类究竟指何?ABA问题与CAS操作有何关联?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1546个文字,预计阅读时间需要7分钟。
1. 解决并发不是用锁就能解决,那SDK是否还需要搞个原子类出来? - 锁可能不足以解决并发问题,SDK可能需要开发原子类来提供更精细的控制。
2. 锁固然可能解决问题,但加锁解锁的起始终还是对性能有影响的,并且使用不当可能会造成死锁等问题。
1)解决并发不是用锁就能解决吗,那SDK干嘛还要搞个原子类出来?
-
锁虽然能解决,但是加锁解锁始终还是对性能是有影响的,并且使用不当可能会造成死锁之类的问题。
2)原子类是怎样使用的,比如说我要实现一个线程安全的累加器?
public class Test {
AtomicLong count =
new AtomicLong(0); // 原子类变量count
void add10K() {
int idx = 0;
while(idx++ < 10000) {
count.getAndIncrement();// 原子操作
}
}
}
3)原子类是无锁的,那他底层是靠什么来实现原子安全的?
-
靠硬件。我们的CPU为了解决并发问题,提供了CAS指令,而CPU的指令本身就是原子性的。
本文共计1546个文字,预计阅读时间需要7分钟。
1. 解决并发不是用锁就能解决,那SDK是否还需要搞个原子类出来? - 锁可能不足以解决并发问题,SDK可能需要开发原子类来提供更精细的控制。
2. 锁固然可能解决问题,但加锁解锁的起始终还是对性能有影响的,并且使用不当可能会造成死锁等问题。
1)解决并发不是用锁就能解决吗,那SDK干嘛还要搞个原子类出来?
-
锁虽然能解决,但是加锁解锁始终还是对性能是有影响的,并且使用不当可能会造成死锁之类的问题。
2)原子类是怎样使用的,比如说我要实现一个线程安全的累加器?
public class Test {
AtomicLong count =
new AtomicLong(0); // 原子类变量count
void add10K() {
int idx = 0;
while(idx++ < 10000) {
count.getAndIncrement();// 原子操作
}
}
}
3)原子类是无锁的,那他底层是靠什么来实现原子安全的?
-
靠硬件。我们的CPU为了解决并发问题,提供了CAS指令,而CPU的指令本身就是原子性的。

