文档章节

Java synchronized、volatile备忘

cwalet
 cwalet
发布于 2015/03/03 10:12
字数 248
阅读 69
收藏 0
点赞 0
评论 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
粉丝 43
博文 110
码字总数 86709
作品 0
其他
synchronized和volatile解决线程可见性

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

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

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

欧阳海阳
07/13
0
0
Java 编程之美:并发编程基础晋级篇

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

gitchat
04/18
0
0
Java并发学习之Volatile及内存模型探究

volatile工作原理 java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。 Java语言提供了volatile,在某些情况下比锁更加方便...

小灰灰Blog
2017/11/02
0
0
Java中的transient,volatile和strictfp关键字

Java中的transient,volatile和strictfp关键字 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。例如: class T { transient int a; //不需要维持 int b; //需要维持 } ...

xiahuawuyu
2012/05/17
0
0
Java中的transient,volatile和strictfp关键字

class T { transient int a; //不需要维持 int b; //需要维持 } class T {transient int a; //不需要维持int b; //需要维持} 这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保...

哈全文
2012/09/03
0
0
java线程同步之volatile

volatile的概念: volatile与synchronized关键字是多线程并发编程中非常重要的知识点,通常被用于修饰变量。相比于synchroinized来说,volatile要轻量很多,执行的成本会更低。原因是volatil...

lotnip
05/24
0
0
从面试到技术提升(Java篇-上卷)

背景 其实,这系列文章我构思了很久。从我大概2016年初断断续续在CSDN上写博客开始,我就想好好整理一篇Android的综合文章。奈何那个时候功力尚浅,没办法驾驭(虽然现在依然彩笔一支)。 时...

MDove
今天
0
0
java中的synchronized与volatile

在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。 Java语言是支持多线程的,为了解决线程并发的问题...

Taisuke
2014/03/04
0
1
java中volatile关键字的含义

在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。 Java语言是支持多线程的,为了解决线程并发的问题...

Mr&Cheng
2013/02/23
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

如何把你的Linux系统变的更加安全

做为一个小白,以为自己懂了点Linux知识,会搭建Linux各种服务就觉得自己牛的不要要的。在我们团队里面,我将使用了一台破电脑搭建Linux服务器,上面跑着Ftp服务存放着资源,ssh服务可以远程...

问题终结者
2分钟前
0
0
lombok的使用和原理

一、项目背景 在写Java程序的时候经常会遇到如下情形: 新建了一个Class类,然后在其中设置了几个字段,最后还需要花费很多时间来建立getter和setter方法 lombok项目的产生就是为了省去我们手...

颖辉小居
2分钟前
0
0
rsync至服务同步-系统日志-screen

rsync: 服务同步;配置文件:/etc/rsyncd.conf 默认端口:873 服务启动:rsync --daemon rsync -av /root/1.txt 192.168.1.2::test/2.txt (test为模块名称) /etc/rsync.conf配置样例: #指定...

ZHENG-JY
5分钟前
0
0
读取文件中内容转换成字符串

package com.lieni.ruyu.api.xmlTool; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.Unsuppo......

newdeng
5分钟前
0
0
《PHP和MySQL Web 开发》 第8章 设计Web数据库

LCL WARNING 这是我学习《PHP和MySQL Web 开发》的读书笔记,一些重要的知识点我会记录下来,当然只会写我觉得重要的。 如果有幸有人看到这个学习笔记了,你要结合着书看,不要光看这个笔记。...

十万猛虎下画山
12分钟前
0
0
Spring+jpaNo transactional EntityManager available

TransactionRequiredException: No transactional EntityManager availableEntityManager执行以下方法(refresh, persist, flush, joinTransaction, remove, merge) 都需要需要事务i......

wpfc
12分钟前
0
0
八幅漫画理解使用JSON Web Token设计单点登录系统

八幅漫画理解使用JSON Web Token设计单点登录系统 Sep 07, 2015 in Engineering 上次在《JSON Web Token - 在Web应用间安全地传递信息》中我提到了JSON Web Token可以用来设计单点登录系统。...

祖冲之
14分钟前
0
0
Spring框架中的设计模式(三)

Spring框架中的设计模式(三) 原创: 瑞查德-Jack 在之前的两篇文章中,我们看到了一些在Spring框架中实现的设计模式。这一次我们会发现这个流行框架使用的3种新模式。 本文将从描述两个创意...

瑞查德-Jack
18分钟前
1
0
[MicroPython]TPYBoard智能小车“飞奔的TPYBoard装甲一号”

智能小车作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。智能小车能够实时显示时间、速度、里程,具...

bodasisiter
19分钟前
0
0
桌面虚拟化VDI(Virtual Desktop Infrastructure)

为了保证员工(客户)不把公司的资料复制、传输给别人。可以把员工平时办公放在服务器上做。所以使用桌面虚拟化。就是把一个服务器虚拟出很多桌面系统(如:windows)。 桌面虚拟化最大的优势...

王坤charlie
27分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部