一、简介

在Java多线程中,我们要实现同步串行最早接触的就是synchronized关键字。

基本语法如下:

synchronized(锁) {// 代码块
}

sychronized关键字的锁主要有三种使用:

1)对象锁

2)类锁

3)字符串锁

二、示例

一、对象锁

最常见的写法,synchronized写在了成员方法上,这表示它以this为锁,锁的是当前对象

public synchronized void execute() {// 代码
}

或者你也可以换一种写法,降低锁粒度

public void execute() {synchronized (this) {// 代码块
        }}

二、类锁

静态方法加锁,那么锁的是类

public static synchronized void execute() {// 代码块}

你也可以把类当作锁

public void execute() {synchronized (SynchronizedDemo.class) {// 代码块
        }}

三、字符串

除了对象锁,类锁,Java还支持以一个字符串作为锁。

这里注意,通常我们会和String的intern()方法一起用。intern()方法会将相同的值引用指向常量池的同一个内存块,所以可以保证字符串值相同即锁相同(即使值是由引用拼接的)。

private String id = "1";public void execute() {synchronized (id) {// 代码块
        }}

转载于:https://www.cnblogs.com/lay2017/p/10165196.html

三、synchronized同步锁相关推荐

  1. Synchronized同步锁

    导致线程安全的问题在于,存在多个线程2同时操作一个共享资源,需要解决这个问题,就需要保证对共享资源访问的独占性,因此人们在Java中提供了synchronized关键字,我们称之为同步锁,它可以保证在 ...

  2. Java多线程系列(六):深入详解Synchronized同步锁的底层实现

    谈到多线程就不得不谈到Synchronized,很多同学只会使用,缺不是很明白整个Synchronized的底层实现原理,这也是面试经常被问到的环节,比如: synchronized的底层实现原理 s ...

  3. java 同步锁_Java多线程:synchronized同步锁的使用和实现原理

    作用和用法 在多线程对共享资源进行并发访问方面,JDK提供了synchronized关键字来进行线程同步,实现多线程并发访问的线程安全.synchronized的作用主要体现在三个方面:(1)确保线程 ...

  4. Java 并发:第三部分 - 同步锁

    2019独角兽企业重金招聘Python工程师标准>>> 在学完如何创建线程和管理他们之后,是时候进入最重要的部分:同步. 同步是壹种让代码线程安全的方式.可以被多個线程访问的代码必须 ...

  5. Synchronized同步锁是如何实现的

    前言: 要想用好Synchronized锁,首先得了解清楚其实现同步锁的原理 原理解析 首先,看下其修饰代码块时: //关键字在代码块上,锁为括号里面的对象 public void method2() ...

  6. java中synchronized同步锁实现生产者消费者模式

    synchronized介绍 一.基本概念 synchronized关键字是java里面用来在多线程环境下保证线程安全的同步锁:java里面有对象锁和类锁,对象锁是用在对象实例的方法上或者一个对象实例 ...

  7. 一文搞懂Synchronized同步锁的作用范围

    文章目录 类锁 修饰静态方法 修饰代码块 实战演练 对象锁 修饰普通方法 修饰代码块 实战演练 分析   我们对一个方法 增加Synchronized关键字后,当多个线程访问该方法时,整个执行过程会变 ...

  8. synchronized同步锁的三种方式

    不多说,直接上代码 import java.util.ArrayList; import java.util.Collections; import java.util.List; import ja ...

  9. synchronized同步锁原理详解

    Java对象头 JVM中对象头的结构有以下两种(以32位JVM为例): 普通对象的对象头结构 数组对象的对象头结构 其中Mark Word结构 64位虚拟机 Mark Word的结构 Mark Wor ...

最新文章

  1. 豆瓣评分 9.4 的算法巨著,这本书带无数读者入门算法
  2. Django学习笔记(5)---ForeignKey
  3. 互联网送给我们的---“平等互助”
  4. android 模糊查询搜索框_彻底搞懂 iOS 和 Android 的设计差异
  5. jfinal mysql date,jfinal与mysql数据类型拾掇大全
  6. 数据结构-链表3-循环链表
  7. Solaris11创建NFS服务
  8. 2019年python黑马_决心在2019年让Python成为您的朋友
  9. 华为P30系列新配色官宣:9月6日IFA2019上见!
  10. python数据可视化 - matplotlib专题:带数据标签的双batch的Bar图绘制示例
  11. 猫盘群晖外部网络访问的三种方法:公网IP、内网穿透、qc的实际评测
  12. 伪随机生成器具体实现——线性同余法
  13. 三次握手,为什么不是两次,也不是四次
  14. Android 关于图片的压缩
  15. oracle+dba+网课,[Oracle] 蓬动Oracle教程 DBA培训视频实战精品课及开发转Oracle 共52课...
  16. android如何获取进程占用的内存大小,Android获取cpu使用率,剩余内存和硬盘容量
  17. 测试wince wifi漫游的方法(参考)
  18. SunOne中的domian常用命令
  19. Peewee 使用手册
  20. java压缩文件,在线下载文件并压缩

热门文章

  1. MySQL主从复制延迟原因及处理思路
  2. Git Merge代码失败 解决
  3. 使用xcopy对文件夹进行复制,del、rd 删除文件、文件夹
  4. cmd-bat批处理命令延时方法
  5. 测试~在使用共通处理时,需要注意的问题 ~ 使用前,清空Form中的值。
  6. unknown host www.baidu.com 解决方法
  7. 【异常检测】Isolation forest 的spark 分布式实现
  8. 解决FastCGI 进程超过了配置的活动超时时限的问题
  9. 01-路由跳转 安装less this.$router.replace(path) 解决vue/cli3.0语法报错问题
  10. 对类型“H12.MainWindow”的构造函数执行符合指定的绑定约束的调用时引发了异常。