三、synchronized同步锁
一、简介
在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同步锁相关推荐
- Synchronized同步锁
导致线程安全的问题在于,存在多个线程2同时操作一个共享资源,需要解决这个问题,就需要保证对共享资源访问的独占性,因此人们在Java中提供了synchronized关键字,我们称之为同步锁,它可以保证在 ...
- Java多线程系列(六):深入详解Synchronized同步锁的底层实现
谈到多线程就不得不谈到Synchronized,很多同学只会使用,缺不是很明白整个Synchronized的底层实现原理,这也是面试经常被问到的环节,比如: synchronized的底层实现原理 s ...
- java 同步锁_Java多线程:synchronized同步锁的使用和实现原理
作用和用法 在多线程对共享资源进行并发访问方面,JDK提供了synchronized关键字来进行线程同步,实现多线程并发访问的线程安全.synchronized的作用主要体现在三个方面:(1)确保线程 ...
- Java 并发:第三部分 - 同步锁
2019独角兽企业重金招聘Python工程师标准>>> 在学完如何创建线程和管理他们之后,是时候进入最重要的部分:同步. 同步是壹种让代码线程安全的方式.可以被多個线程访问的代码必须 ...
- Synchronized同步锁是如何实现的
前言: 要想用好Synchronized锁,首先得了解清楚其实现同步锁的原理 原理解析 首先,看下其修饰代码块时: //关键字在代码块上,锁为括号里面的对象 public void method2() ...
- java中synchronized同步锁实现生产者消费者模式
synchronized介绍 一.基本概念 synchronized关键字是java里面用来在多线程环境下保证线程安全的同步锁:java里面有对象锁和类锁,对象锁是用在对象实例的方法上或者一个对象实例 ...
- 一文搞懂Synchronized同步锁的作用范围
文章目录 类锁 修饰静态方法 修饰代码块 实战演练 对象锁 修饰普通方法 修饰代码块 实战演练 分析 我们对一个方法 增加Synchronized关键字后,当多个线程访问该方法时,整个执行过程会变 ...
- synchronized同步锁的三种方式
不多说,直接上代码 import java.util.ArrayList; import java.util.Collections; import java.util.List; import ja ...
- synchronized同步锁原理详解
Java对象头 JVM中对象头的结构有以下两种(以32位JVM为例): 普通对象的对象头结构 数组对象的对象头结构 其中Mark Word结构 64位虚拟机 Mark Word的结构 Mark Wor ...
最新文章
- 豆瓣评分 9.4 的算法巨著,这本书带无数读者入门算法
- Django学习笔记(5)---ForeignKey
- 互联网送给我们的---“平等互助”
- android 模糊查询搜索框_彻底搞懂 iOS 和 Android 的设计差异
- jfinal mysql date,jfinal与mysql数据类型拾掇大全
- 数据结构-链表3-循环链表
- Solaris11创建NFS服务
- 2019年python黑马_决心在2019年让Python成为您的朋友
- 华为P30系列新配色官宣:9月6日IFA2019上见!
- python数据可视化 - matplotlib专题:带数据标签的双batch的Bar图绘制示例
- 猫盘群晖外部网络访问的三种方法:公网IP、内网穿透、qc的实际评测
- 伪随机生成器具体实现——线性同余法
- 三次握手,为什么不是两次,也不是四次
- Android 关于图片的压缩
- oracle+dba+网课,[Oracle] 蓬动Oracle教程 DBA培训视频实战精品课及开发转Oracle 共52课...
- android如何获取进程占用的内存大小,Android获取cpu使用率,剩余内存和硬盘容量
- 测试wince wifi漫游的方法(参考)
- SunOne中的domian常用命令
- Peewee 使用手册
- java压缩文件,在线下载文件并压缩
热门文章
- MySQL主从复制延迟原因及处理思路
- Git Merge代码失败 解决
- 使用xcopy对文件夹进行复制,del、rd 删除文件、文件夹
- cmd-bat批处理命令延时方法
- 测试~在使用共通处理时,需要注意的问题 ~ 使用前,清空Form中的值。
- unknown host www.baidu.com 解决方法
- 【异常检测】Isolation forest 的spark 分布式实现
- 解决FastCGI 进程超过了配置的活动超时时限的问题
- 01-路由跳转 安装less this.$router.replace(path) 解决vue/cli3.0语法报错问题
- 对类型“H12.MainWindow”的构造函数执行符合指定的绑定约束的调用时引发了异常。