Java原子类究竟指何?ABA问题与CAS操作有何关联?

2026-05-25 13:460阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1546个文字,预计阅读时间需要7分钟。

Java原子类究竟指何?ABA问题与CAS操作有何关联?

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分钟。

Java原子类究竟指何?ABA问题与CAS操作有何关联?

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的指令本身就是原子性的。

阅读全文