文档章节

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里面多线程同步的一些知识

# 关于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
Java并发学习之Volatile及内存模型探究

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

小灰灰Blog
2017/11/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

精选Spring Boot三十五道必知必会知识点!

Spring Boot、Spring MVC 和 Spring 有什么区别? 1、Spring Spring最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制反转。 当我们恰当的使用 DI 或者是 IOC 的时候,...

java知识分子
3分钟前
0
0
docker多容器部署lnmp环境

环境:RHEL7.5 ip:192.168.10.102,主机名:lb02 一、创建web、数据库目录 web网站目录为:/wwwroot,属主属组:www [root@lb02 ~]# mkdir /wwwroot[root@lb02 ~]# useradd -s /sbin/nolo...

人在艹木中
32分钟前
1
0
eclipse运行springboot项目报错‘找不到或无法加载主类’

这是一个很烦躁的问题~,往往困住大家好长时间,然后各种百度。借此,咱将这个问题有可能产生的原因进行一下总结。若有不完善之处欢迎大家在下面留言指出~~ Duang!问题出现 然后开始尝试解决...

Code辉
53分钟前
1
0
springboot oauth2 跨域设置

@Overridepublic void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/security/**") .authentica......

昆虫大侠
55分钟前
1
0
08-利用思维导图梳理JavaSE-泛型

08-利用思维导图梳理JavaSE-泛型 主要内容 1.泛型的基本概念 1.1.定义 1.2.使用前提 1.3.使用泛型的好处 2.泛型的使用 2.1.泛型类定义 2.2.泛型对象定义 2.3.泛型中的构造方法 2.4.泛型方法的...

飞鱼说编程
56分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部