文档章节

Java synchronized、volatile备忘

cwalet
 cwalet
发布于 2015/03/03 10:12
字数 248
阅读 71
收藏 0

以下代码每段均是一个单独示例:

// synchronized锁定的是调用这个同步方法的对象
public synchronized void method() {}

// synchronized锁定的是这个静态同步方法的类(对象)
public static synchronized void method() {}

// synchronized锁定的是调用这个方法的当前(this)对象
public void method() {
    synchronized (this) {}
}

// synchronized锁定的是这个方法所在的类(Class对象),不推荐这样写
public void method() {
    synchronized (this.getClass()) {}
}

// synchronized锁定的是这个方法所在的类(Class对象),推荐这样写
public class Test {
    public void method() {
        synchronized (Test.class) {}
    }
}

// synchronized锁定的是Object类(Class对象)
public void method() {
    synchronized (Object.class) {}
}

// synchronized锁定的是内部变量(Object类型的实例对象)
public class Test {
    private Object lockObj = new Object();
    
    public void method() {
        synchronized (lockObj) {}
    }
}

// 结合使用 volatile 和 synchronized 实现 “开销较低的读-写锁” 
public class CheesyCounter {
    private volatile int value;

    public int getValue() {
        return value;
    }

    public synchronized int increment() {
        return value++;
    }
}

参考:Java 理论与实践: 正确使用 Volatile 变量

EOF.

© 著作权归作者所有

共有 人打赏支持
cwalet
粉丝 44
博文 111
码字总数 87663
作品 0
其他
私信 提问
深入理解Java中的volatile关键字

本文就围绕volatile展开,主要介绍volatile的用法、volatile的原理,以及volatile是如何提供可见性和有序性保障的等。 volatile这个关键字,不仅仅在Java语言中有,在很多语言中都有的,而且...

Mr_zebra
2018/10/31
0
0
再有人问你volatile是什么,就把这篇文章发给他

Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurren包等。在前一篇文章中,我们也介绍了syn...

Java小铺
2018/08/13
0
0
《成神之路-高级篇》Java并发编程——锁

本文是《成神之路系列文章》的第一篇,主要是关于JVM的一些介绍。 持续更新中 数据库相关锁机制 数据库的锁机制 表级锁、行级锁、页级锁 共享锁、排他锁 乐观锁与悲观锁 乐观锁、悲观锁 乐观...

HollisChuang's Blog
2018/10/14
0
0
synchronized和volatile解决线程可见性

java多线程开发中,控制共享数据比较麻烦,有可见性和同步性。一般控制可见性我们可以通过synchronized和volatile控制,而同步性我们只能通过synchronized或Lock来控制。 我喜欢通过对一个问...

beidao-ai
2015/11/06
0
0
关于Java里面多线程同步的一些知识

# 关于Java里面多线程同步的一些知识 对于任何Java开发者来说多线程和同步是一个非常重要的话题。比较好的掌握同步和线程安全相关的知识将使得我们则更加有优势,同时这些知识并不是非常容易...

欧阳海阳
2018/07/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

a标签点击浏览器下载图片,不打开

网上好多给a标签加download属性的,但都不好使。 <!doctype html><html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name="Auth......

S三少S
6分钟前
14
0
搭建私有maven仓库并在项目中使用

这是一篇写给女朋友看的教程...前方高能,注意避让~ 1.私有maven仓库的搭建 搭建环境为阿里云ESC服务器,CentOS.确保服务器已经安装Jdk。然后我要手把手教你安装和启动nexus。 Step1:新建一个...

liululee
8分钟前
1
0
js 写文件

//写文件function doSave(value, type, name) {    var blob;    if (typeof window.Blob == "function") {        blob = new Blob([value], {type: type});    }......

重城重楼
18分钟前
1
0
Ubuntu and Apache 搭建 Let's Encrypt SSL Https

本文参考来着来自https://www.howtoing.com/install-free-lets-encrypt-ssl-certificate-for-apache-on-debian-and-ubuntu 感谢作者的分享 本事例环境介绍 ubuntu (Version 16.04.1 LTS) ubu......

罗培海
21分钟前
16
0
如何优雅的使用RabbitMQ

目录 RabbitMQ无疑是目前最流行的消息队列之一,对各种语言环境的支持也很丰富,作为一个.NET developer有必要学习和了解这一工具。消息队列的使用场景大概有3种: 1、系统集成,分布式系统的...

编程SHA
24分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部