文档章节

Java synchronized、volatile备忘

cwalet
 cwalet
发布于 2015/03/03 10:12
字数 248
阅读 69
收藏 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
其他
私信 提问
synchronized和volatile解决线程可见性

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

beidao-ai
2015/11/06
0
0
深入理解Java中的volatile关键字

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

Mr_zebra
10/31
0
0
关于Java里面多线程同步的一些知识

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

欧阳海阳
07/13
0
0
再有人问你volatile是什么,就把这篇文章发给他

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

Java小铺
08/13
0
0
Java 编程之美:并发编程基础晋级篇

本文来自作者 加多 在 GitChat 上分享 「Java 并发编程之美:并发编程基础晋级篇」 编辑 | Mc Jin 借用 Java 并发编程实践中的话,编写正确的程序并不容易,而编写正常的并发程序就更难了! ...

gitchat
04/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

技术工坊|如何开发一款以太坊钱包(深圳)

【好消息!】HiBlock区块链技术工坊已经成功举办了26期,其中北京1期,西安1期,成都2期,上海22期。经常有社区的小伙伴问定期举办技术工坊的除了上海以外,其他城市有没有?现在区块链技术工...

HiBlock
昨天
1
0
Redis 梳理笔记

安装 安装gccyum install gcc-c++下载传输到服务器上解压tar -xzvf *.tar.gzcd redis-3.2.9编译make安装 make PREFIX=/usr/local/redis install将配置文件拷贝出来cp redis...

晨猫
昨天
0
0
PyCharm flask 'Debug mode off' 调试模式关闭的解决方法

flask的几种debug模式的方法 # 1.app.run 传参debug=trueapp.run(debug=True) #2 设置app的配置app = Flask(__name__)app.config['DEBUG'] = True #3 配置文件方式# config.py中添加d...

yimingkeji
昨天
1
0
聊聊storm TridentWindowManager的pendingTriggers

序 本文主要研究一下storm TridentWindowManager的pendingTriggers TridentBoltExecutor.finishBatch storm-core-1.2.2-sources.jar!/org/apache/storm/trident/topology/TridentBoltExecut......

go4it
昨天
1
0
java实现多线程两种基本方式

我们在开发当中经常会使用到多线程,这里我们来写两个小案例通过最基本的两种方式继承Thread类或实现Runnable接口来实现一个多线程。 继承Thread类 我们可以通过继承Thread类,并重写run()方...

王子城
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部