`
whnuliba
  • 浏览: 571 次
社区版块
存档分类
最新评论

比较volatile下count++和 AtomicInteger自增中原子操作问题

阅读更多
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;

public class VolatileTest {
private  AtomicInteger count1 = new AtomicInteger(0);

private volatile int count = 0;

public /* synchronized */ void increase() {
count++;
}
public  void increase2() {
count1.addAndGet(1);
}
public static void main(String[] args) throws InterruptedException {
CountDownLatch end = new CountDownLatch(10);
CountDownLatch start =  new CountDownLatch(1);
ExecutorService es   = Executors.newFixedThreadPool(10);
VolatileTest v = new VolatileTest();
for(int i=0;i<10;i++) {
es.execute(()->{
try {
start.await();
for(int j=0;j<1000;j++) {
v.increase();
}
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
end.countDown();
}

});
}
System.out.println("线程开启执行");
start.countDown();
end.await();
System.out.println("计算结果");
System.out.println(v.count);

}
   

}
分享到:
评论

相关推荐

    Java并发volatile关键字.docx

    例如,对于volatile变量的自增操作(i++),这个操作包括读取、增加和写回三个步骤,这三个步骤在多线程环境下不是原子的,可能会出现线程安全问题。在上述示例中,`Conter.inc()`方法中的`count++`操作,即使count...

    Java并发编程系列- volatile

    Java并发编程中的`volatile`关键字是一个非常重要的概念,它用于解决多线程环境下的数据同步问题。`volatile`关键字提供了两种关键特性: 1. **保证可见性**:当一个线程修改了`volatile`变量,这个修改对于其他...

    Java并发编程(18)第五篇中volatile意外问题的

    在Java并发编程中,volatile关键字扮演着至关重要的角色,它提供了线程间的可见性和部分内存屏障,以确保共享变量在多线程环境下的正确性。然而,在实际应用中,开发者可能会遇到一些意料之外的问题,这通常是因为对...

    java代码-volatile原子性

    总的来说,`volatile`关键字在Java中用于解决多线程环境下的可见性和有序性问题,但不能保证原子性。在编写多线程程序时,我们需要结合使用`volatile`、`synchronized`以及原子类来实现线程安全的数据访问,以确保...

    Java多线程 - (一) 最简单的线程安全问题

    在Java编程中,多线程是并发处理任务的关键技术,特别是在服务器端开发和高并发场景下。本篇文章将深入探讨“最简单的线程安全问题”,并结合相关源码和工具来帮助理解。线程安全问题通常涉及到多个线程对共享资源的...

    Java原子操作CAS原理解析

    Java原子操作CAS原理解析 Java原子操作CAS原理解析是Java并发编程中的一种机制,用于解决多线程并行情况下...在上面的代码中,使用AtomicInteger来实现原子操作,避免了线程安全问题,提高了代码的可读性和可维护性。

    一文读懂ava中的Volatile关键字使用

    例如,对于`volatile int count`,`count++`操作包含读取当前值、增加1和写回新值三个步骤,这些步骤不是原子性的,所以多线程环境下依然可能出现并发问题。 **使用场景**: 1. **状态标志**:当一个变量仅用于表示...

    深入了解Java中Volatile关键字

    Volatile关键字是Java语言中的一种关键字,主要用于解决多线程编程中的可见性、原子性和有序性问题。本文将详细介绍Volatile关键字的相关知识,并通过代码帮助大家更好地理解和学习。 一、基本概念 在Java内存模型...

    Java里volatile关键字是什么意思

    Java中的`volatile`关键字是用来解决多线程环境下的可见性和有序性问题的。它确保了被`volatile`修饰的变量在任何线程中都具有最新的值,但并不保证线程安全,即不保证并发操作的原子性。 首先,我们要理解Java内存...

    CAS学习手册-JAVA程序员必备

    CAS机制是JAVA程序员处理并发问题的一种重要工具,它提供了无锁的原子操作,但在某些场景下,可能需要结合其他同步策略如`synchronized`或`Lock`来应对复杂的并发控制需求。理解并熟练应用CAS,可以提升多线程程序...

    探索Java并发的基石:同步机制的全面解析

    Java中的同步机制是确保多线程环境下数据一致性和线程安全的重要手段。正确地理解和运用这些机制对于开发高性能、可靠的应用程序至关重要。通过上述介绍的几种同步机制,开发者可以根据具体的场景选择最适合的方式来...

    java线程-Java内存模型

    Java提供了synchronized和java.util.concurrent包下的原子类(如AtomicInteger)来保证某些操作的原子性,确保多线程环境下的数据完整性。 3. 有序性问题:JVM为了优化性能,可能会对指令进行重排序,但这可能导致...

    java volatile关键字的含义详细介绍

    Java中的`volatile`关键字是用来解决多线程并发访问共享变量时的可见性和有序性问题的。在Java中,每个线程都有自己的工作内存,用于存储从主内存中复制的变量副本。如果没有同步措施,线程间无法直接感知彼此对共享...

    深入解析Java中volatile关键字的作用

    在Java编程语言中,`volatile`关键字是一个非常重要的线程安全特性,它的主要作用在于确保共享变量在多线程环境下的可见性和有序性。当一个变量被声明为`volatile`时,它有以下两个核心特性: 1. **可见性**:当一...

    关于synchronized有趣的同步问题

    解决这个问题的一种方法是将`count`声明为volatile,这将确保所有线程都能看到`count`的最新值,但volatile并不保证原子性,因此仍然不能解决自增操作的并发问题。正确的做法是将`synchronized`作用于包含自增操作的...

    线程问题出现与解决

    - **使用`Atomic`类**:Java提供了`java.util.concurrent.atomic`包下的原子类,如`AtomicInteger`,用于实现无锁的原子操作。 - **使用线程局部变量**:通过`ThreadLocal`类来为每个线程提供独立的变量副本。 **...

    Thread Synchronization

    Java并发库中还提供了一系列`Atomic`类,如`AtomicInteger`、`AtomicLong`等,它们提供了原子操作的方法,可以在不需要显式同步的情况下实现对变量的安全修改。 ```java import java.util.concurrent.atomic....

    java同步、异步相关知识点

    Java提供了一系列工具和技术来实现同步,包括`synchronized`关键字、`volatile`变量以及原子操作等。 ##### 1. `synchronized`关键字 `synchronized`关键字是最常用的同步机制之一。它可以用来修饰方法或者代码块...

    线程池源码解析-多线程

    `AtomicInteger`的核心特性是其内部维护的`value`字段是volatile的,这确保了多线程环境下的可见性和有序性。它提供了`get()`、`set()`等基本操作,同时还有如`compareAndSet()`、`incrementAndGet()`等原子操作,...

    15个顶级Java多线程面试题及回答.docx

    Java提供了`AtomicInteger`等类来实现原子操作,这些类内部使用了`Unsafe`类中的CAS算法来保证原子性。 ```java import java.util.concurrent.atomic.AtomicInteger; public class AtomicIntegerExample { ...

Global site tag (gtag.js) - Google Analytics