zoukankan      html  css  js  c++  java
  • Java 多线程

    synchronized 和 volatile 的区别是什么?

    作用:

    synchronized 表示只有一个线程可以获取作用对象的锁,执行代码,阻塞其他线程。
    volatile 表示变量在 CPU 的寄存器中是不确定的,必须从主存中读取。保证多线程环境下变量的可见性;禁止指令重排序。
     

    区别:

    • synchronized关键字实现的功能涵盖了volatile,功能更强大,也更重量级。
    • synchronized 可以作用于变量、方法、对象;volatile 只能作用于变量。
    • synchronized 可以保证线程间的有序性(猜测是无法保证线程内的有序性,即线程内的代码可能被 CPU 指令重排序)、原子性和可见性;volatile 只保证了可见性和有序性,无法保证原子性。
    • synchronized 线程阻塞,volatile 线程不阻塞。
  • 相关阅读:
    P1171 售货员的难题--搜索(剪枝)
    逆元-P3811 【模板】乘法逆元-洛谷luogu
    gcd和exgcd和lcm
    递推
    Docker hello workd
    Docker配置文件详解
    Centos7变动
    centos7安装docker
    nginx性能调优
    nginx相关
  • 原文地址:https://www.cnblogs.com/frankcui/p/14367258.html
Copyright © 2011-2022 走看看