Synchronized同步锁
导致线程安全的问题在于,存在多个线程2同时操作一个共享资源,需要解决这个问题,就需要保证对共享资源访问的独占性,因此人们在Java中提供了synchronized关键字,我们称之为同步锁,它可以保证在同一时刻,只允许一个线程执行某个方法或代码块。
synchronized同步锁具有互斥性,这相当于线程由并行执行变成串行执行,保证了线程的安全性,但损失了性能。
synchronized的使用方法
- 作用在方法级别,表示针对m1()方法加锁,当多个线程同时访问m1()方法时,同一时刻只有一个线程能执行。
public synchronized void m1(){}
- 作用在代码块级别,表示针对某一段线程不安全的代码加锁,只有访问到synchronized(this)这行代码时,才会去竞争锁资源。
public void m2(){synchronized(this){}
}
synchronized同步锁的作用范围
- 类锁:类锁是全局锁,当多个线程调用不同对象实例的同步方法时会产生互斥。
/**修饰静态方法*/public static synchronized void m1(){}/**修饰代码块,synchronized中的锁对象是类,也就是Lock.class*/ public class Lock{public void m2(){synchronized(Lock.calss){}} }
- 对象锁:对象锁是实例锁,当多个线程调用同一个对象实例的同步方法时会产生互斥。
//修饰普通方法
public synchronized void m1(){}//修饰代码块,synchronized中的锁对象是普通对象实例
public class Lock{Object lock = new Object();public void m2(){synchronized(lock){}}
}
Synchronized同步锁相关推荐
- Java多线程系列(六):深入详解Synchronized同步锁的底层实现
谈到多线程就不得不谈到Synchronized,很多同学只会使用,缺不是很明白整个Synchronized的底层实现原理,这也是面试经常被问到的环节,比如: synchronized的底层实现原理 s ...
- java 同步锁_Java多线程:synchronized同步锁的使用和实现原理
作用和用法 在多线程对共享资源进行并发访问方面,JDK提供了synchronized关键字来进行线程同步,实现多线程并发访问的线程安全.synchronized的作用主要体现在三个方面:(1)确保线程 ...
- Synchronized同步锁是如何实现的
前言: 要想用好Synchronized锁,首先得了解清楚其实现同步锁的原理 原理解析 首先,看下其修饰代码块时: //关键字在代码块上,锁为括号里面的对象 public void method2() ...
- 一文搞懂Synchronized同步锁的作用范围
文章目录 类锁 修饰静态方法 修饰代码块 实战演练 对象锁 修饰普通方法 修饰代码块 实战演练 分析 我们对一个方法 增加Synchronized关键字后,当多个线程访问该方法时,整个执行过程会变 ...
- java中synchronized同步锁实现生产者消费者模式
synchronized介绍 一.基本概念 synchronized关键字是java里面用来在多线程环境下保证线程安全的同步锁:java里面有对象锁和类锁,对象锁是用在对象实例的方法上或者一个对象实例 ...
- 三、synchronized同步锁
一.简介 在Java多线程中,我们要实现同步串行最早接触的就是synchronized关键字. 基本语法如下: synchronized(锁) {// 代码块 } sychronized关键字的锁主要 ...
- synchronized同步锁原理详解
Java对象头 JVM中对象头的结构有以下两种(以32位JVM为例): 普通对象的对象头结构 数组对象的对象头结构 其中Mark Word结构 64位虚拟机 Mark Word的结构 Mark Wor ...
- synchronized同步锁的三种方式
不多说,直接上代码 import java.util.ArrayList; import java.util.Collections; import java.util.List; import ja ...
- Java中String做为synchronized同步锁
synchronized (("" + userId).intern()) {// TODO:something} JVM内存区域里面有一块常量池,关于常量池的分配: JDK6的版 ...
最新文章
- 基于OpenCV的车辆变道检测
- java编程思想(第四版)第二章练习题-12
- 【深度学习】我用 PyTorch 复现了 LeNet-5 神经网络(自定义数据集篇)!
- Matlab高级绘图功能
- 如何在CentOS 7上安装和配置MySQL Cluster
- Introduction to Oracle9i: SQL------- left join 和 left outer join 的区别
- UVA 1590 IP Networks
- delphi 10.3.1 android沉浸式透明状态栏
- 如何建立数学模型系列之【一.通俗解释及相关概念】
- linux 声卡驱动测试,Linux声卡驱动移植和测试
- 分析支付宝客户端的插件机制
- linux如何关闭netbios服务,Samba 'nmbd' NetBIOS名称服务守护程序拒绝服务漏洞
- 简述人工智能的应用领域
- 武魂显示无法连接服务器,武魂天下进不去连接服务器失败解决方法
- weblogic wls-wsat组件远程命令执行(CVE-2017-3506)
- 南宁python培训价格
- js 取色器和 颜色拾取工具
- 无法打开此计算机的组策略,无法运行gpedit.msc(组策略)的解决
- 与bootstrap相配合使用的插件
- 如何做一个简单的开放接口(1)-功能设计