volatile和synchronized的区别

简介: volatile和synchronized的区别

volatile与synchronized对数值进行操作时,可以保证数据的正确性,但后者速度更快
代码如下:

public class T7 {

volatile static int num = 0;
static CountDownLatch latch = new CountDownLatch(100);
//volatile线程可见
static volatile AtomicInteger a = new AtomicInteger();

public static void main(String[] args) {
    var s = System.currentTimeMillis();
    for (int i = 0; i < 100; i++) {
        T7 tt = new T7();
        new Thread(T7::ss, "T" + i).start();
    }
    //new Thread(T7::s1).start();
    try {
        latch.await();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println(System.currentTimeMillis() - s);
}

static void s1() {
    try {
        latch.await();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println(a);
}

synchronized static void ss1() {
    for (int i = 0; i < 1000; i++) {
        num++;
    }
    latch.countDown();
}

static void ss() {
    for (int i = 0; i < 1000; i++) {
        a.incrementAndGet();
    }
    latch.countDown();
}

}

目录
相关文章
|
6月前
|
缓存 Java 编译器
volatile与synchronized
volatile与synchronized
56 0
|
6月前
|
安全 Java 程序员
synchronized关键字与ReentrantLock的区别和应用
synchronized关键字与ReentrantLock的区别和应用
37 0
|
安全 Java 编译器
volatile 与 synchronized 关键字的区别?
volatile 与 synchronized 关键字的区别?
54 0
|
缓存 安全 Java
Java并发编程中的四个关键字:ThreadLocal、Volatile、Synchronized和Atomic
Java并发编程中的四个关键字:ThreadLocal、Volatile、Synchronized和Atomic
262 0
|
缓存 Java 编译器
并发编程-06线程安全性之可见性 (synchronized + volatile)
并发编程-06线程安全性之可见性 (synchronized + volatile)
86 0
|
SQL 缓存 安全
synchronized和volatile底层原理分析
CAS Compare And Swap (Compare And Exchange) / 自旋 / 自旋锁 / 无锁 因为经常配合循环操作,直到完成为止,所以泛指一类操作 cas(v, a, b)
91 0
volatile 和synchronized的目的
volatile保证可见性的原理是在每次访问变量时都会进行一次刷新,因此每次访问都是主内存中最新的版本。所以volatile作用之一就是保证变量修改的实时可见性。
java多线程关键字volatile、lock、synchronized
volatile写和volatile读的内存语义: 1. 线程A写一个volatile变量,实质上是线程A向接下来将要读这个volatile变量的某个线程发出了(其对共享变量所在修改的)消息。 2. 线程B读一个volatile变量,实质上是线程B接收了之前某个线程发出的(在写这个volatile变量之前对共享变量所做修改的)消息。 3. 线程A写一个volatile变量,随后线程B读这个volatile变量,这个过程实质上是线程A通过主内存向线程B发送消息。
287 0
|
存储 缓存 算法
volatile synchronized cas
之前写了《熔断》,以及其中使用的《计数器算法》;本来是要接着再写不通过定时器清理计数环的计数器算法,看了下我司亿级网关的计数器,百行的代码,但却是满满bug。不得穿插一下并发的基础知识 处理并发,最基本的元件就这三样 1. synchronized 这个关键字不必讲,从开始多线程,它就进入你的视线 2. volatile 在jdk5之后大放异彩 3. cas 在J.U.C中大量使用,他与volatile组合是J.U.C的基石
146 0
volatile synchronized cas
|
Java 编译器
volatile与synchronized 区别
volatile与synchronized 区别
129 0