`
young-2017
  • 浏览: 9479 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Atomic类只能保证本身方法的原子性

阅读更多
package com.example.threadDemo;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * Created by szy on 2017/4/5.
 */
public class MultiAtomicInteger {

    private static AtomicInteger count = new AtomicInteger(0);

    /** 单一count.addAndGet()是原子性的,但多次则不能保证, 通过synchronized 实现多次     操作的原子性 */
    /** private synchronized int multiAdd(){}  */
    private int multiAdd() {
        count.addAndGet(1);
        count.addAndGet(2);
        count.addAndGet(3);
        count.addAndGet(4);
        return count.get();
    }

    public static void main(String[] args) {

        final MultiAtomicInteger multiAtomicInteger = new MultiAtomicInteger();

        List<Thread> threads = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            threads.add(new Thread(
                    new Runnable() {
                        @Override
                        public void run() {
                            System.out.println(multiAtomicInteger.multiAdd());
                        }
                    }
            ));
        }
        for (Thread thread : threads) {
            thread.start();
        }
    }
}

如果是原子性,最终结果应该是1000
  • 大小: 40.4 KB
  • 大小: 34.9 KB
分享到:
评论

相关推荐

    Java并发编程面试题(2022最新版)

    - **volatile:** 只保证可见性,不保证原子性。 - **CAS:** 提供原子性更新,但不保证可见性和有序性。 **synchronized和Lock的区别** - **Lock:** 更灵活,可以实现更复杂的锁功能。 - **synchronized:** 更...

    并发编程面试专题.pdf

    它和synchronized方法不同,volatile不具备互斥性,它不能保证原子操作。 9. 竞争条件:当多个线程并发访问并修改共享数据时,如果没有适当的同步机制,可能会发生数据不一致的情况,这种情况被称为竞争条件。解决...

    Java并发编程实践-电子书-05章.pdf

    需要注意的是,虽然`volatile`可以提供内存可见性保证,但它本身并不具备原子性。因此,如果需要复合操作(比如递增)的原子性,还需要结合其他同步机制。 ##### 5.1.5 `ThreadLocal` `ThreadLocal`提供了一种在...

    MS知识点总结.txt

    - `synchronized` 提供了锁功能,可以保证原子性和可见性。 - `volatile` 仅提供可见性保证,适用于简单的读写操作。 35. **synchronized 与 Lock 的区别** - `synchronized` 是 Java 关键字,而 `Lock` 是一个...

    百度2019年最新面试题库

    - **Atomicity(原子性)**: 事务中的所有操作要么全部完成,要么都不完成。 - **Consistency(一致性)**: 事务完成后,数据库状态必须保持一致。 - **Isolation(隔离性)**: 多个并发事务之间不能相互干扰。 - **...

    ios就业面试题.docx编程资料

    - **`nonatomic`/`atomic`**:`nonatomic`表示非原子性,不保证线程安全,性能更高;`atomic`则保证了线程安全性,但性能略低。 - **`strong`/`weak`**:`strong`表示强引用,用于持有对象,防止对象过早被释放;`...

    Java面试题和答案.pdf

    - `synchronized`关键字利用锁的机制来保证代码块或方法的原子性。 - 在对象级上使用锁标记字段,通过`monitorenter`和`monitorexit`指令实现锁的获取和释放。 **53. `synchronized`和`volatile`的区别是什么?** ...

    高级Java经典面试题2019

    Java提供了`java.util.concurrent.atomic`包下的原子变量类,如`AtomicInteger`,来实现原子性操作。 #### Java中的CAS操作与AtomicLong实现原理 CAS(Compare and Swap)是一种无锁算法,在比较预期值和实际值...

    iOS面试题2019年度总结188题(下).pdf

    - **`nonatomic`**:非原子操作,不保证读写操作的原子性。适用于单线程环境或对性能要求较高的场合。 ### 第111题:`NSLog`如何工作? - `NSLog`是一个用于输出调试信息的函数,它使用格式化字符串的方式打印信息...

    Java方法参数是引用调用还是值调用?

    Java方法参数传递机制是值调用,而不是引用调用,这一点常常引起...总的来说,Java的方法参数传递机制保证了方法的封装性和安全性,防止了意外修改外部对象的引用。理解这一点对于编写可维护和可靠的Java代码至关重要。

    1000道互联网Java工程师面试题485页.pdf

    3. **ZAB协议**:ZooKeeper Atomic Broadcast(原子广播)协议,是ZooKeeper数据一致性的核心算法。 4. **Znode节点类型**:有四种类型:持久(PERSISTENT)、持久顺序(PERSISTENT_SEQUENTIAL)、临时(EPHEMERAL...

Global site tag (gtag.js) - Google Analytics