synchronized修饰方法和代码块的区别
先看一段代码
Class A {public synchronized methodA() {//对当前对象加锁 }public methodB() {synchronized(this){}//对当前对象加锁,与methodA用法相同 }public static synchronized methodC() {}//对类加锁,即对所有此类的对象加锁public methodD(){synchronized(A.class){}//对类加锁,即对所有此类的对象加锁 }}
synchronize用法关键是搞清楚对谁加锁,methodA,和methodB都是对当前对象加锁,即如果有两个线程同时访问同一个对象的methoA和methodB则会发生竞争,必须等待其中一个执行完成后另一个才会执行。如果两个线程访问的是不同对象的methodA和methodB则不会竞争。
methodC和methodD是对类的class对象加锁,methodC和methodD的加锁对象一样,效果也一样。如果两个线程同时访问同一个对象的methodC和methodD是会发生竞争的,两个线程同时访问不同对象的methodC和methodD是也是会发生竞争的,如果两个线程同时访问methoA/B 和methodC/D则不会发生竞争,因为锁对象不同。
synchronized修饰方法和代码块的区别相关推荐
- date对象加十分钟_一张图讲解对象锁和关键字synchronized修饰方法(代码块)
做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 每个对象在出生的时候就有一把钥匙(监视器Monitor),那么被synchronized 修饰的方法相当于给方法加了一个锁 ...
- Java. Static 修饰类_static 表示静态,它可以修饰属性,方法和代码块。
(1)static 表示静态,它可以修饰属性,方法和代码块. 1.static修饰属性(类变量),那么这个属性就可以用类名.属性名来访问,也就是使这个属性成为本类的类变量,为本类对象所共有.这个属性就 ...
- 内部类、包、修饰符、代码块
内部类: 内部类概念:将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类.其他类也称为外部类. 内部类分为成员内部类.局部内部类,内部类中可以直接访问外部类的 ...
- 【Java基础】第6章_面向对象(下)-1:static关键字、main方法、代码块、final关键字
文章目录 1.关键字:static 1.1.static的使用 1.2.类变量 vs 实例变量内存解析 1.3.自定义 ArrayUtil工具类的优化 1.4.static 的应用举例 1.5.练习 ...
- synchronized修饰方法
文章目录 前言 一.Synchronized修饰非静态方法 二.Synchronized修饰静态方法 三.类锁和对象锁的访问是不冲突的 四.总结 前言 直接说结论: 1.Synchronized修饰非 ...
- java中普通代码块,构造代码块,静态代码块的区别及代码示例
本文转自:http://www.cnblogs.com/sophine/p/3531282.html 执行顺序:(优先级从高到低)静态代码块>main方法>构造代码块>构造方法. 其 ...
- 类的加载顺序和静态代码块和匿名代码块的区别
静态代码块和匿名代码块的区别 静态块: static { } 匿名块: { } 静态块只在类第一次被加载的时候执行一次,一般用于进行初始化工作; 匿名块在每一次创建本 ...
- 同步函数与同步代码块的区别
同步函数和同步代码块的区别: 同步函数使用的锁是 固定的this 同步代码的锁是任意对象 建议使用同步代码块, 转载于:https://www.cnblogs.com/liyunchuan/p/107 ...
- synchronized方法与synchronized代码块的区别
2019独角兽企业重金招聘Python工程师标准>>> synchronized methods(){} 与synchronized(this){}之间没有什么区别,只是 synch ...
最新文章
- 《30天吃掉那只 TensorFlow2.0 》(附下载)
- KGK荧光喷码机编程指南
- 透视表提取不反复记录(3)-每组最小值
- c 结构体在声明时赋值_Java基础知识 初识Java 循环结构进阶 数组 数据类型 各种运算符...
- selinux= 为 disabled_「丁香园」五年没考过执医,就不要出来「为祸人间」了
- 解决 display 和 transition 冲突的问题
- 设计模式 笔记 命令模式 Command
- pandas和 excel 尝试
- 15.6. Plugin Hook 设计与实现
- Java学习笔记之设计模式(3)抽象工厂模式
- flex builder的安装
- ES5 标准对象说明
- VIJOS 1206 CoVH之再破难关
- kettle定时备份->mysql+mongoDB增量备份
- vue中clearInterval()清除定时器报timeout.close is not a function错误?
- 如何将英文文献完整翻译?公式都可以快速完整插入,比淘宝上的机翻要强一百倍!
- PEP最新提案推出,Python将上线重大更新,带来了哪些新功能?
- 密码-正则校验(数字、字母、特殊字符-任意组合)
- EFCore——Entry和Attach
- 最全的运营数据指标解读
热门文章
- Failed to install .apk on device 'emulator-5554': timeout解决方法
- android 走马灯效果
- Pytorch模型迁移和迁移学习,导入部分模型参数
- Java字符串常用操作
- HTML JAVASCRIPT CSS 大小写敏感问题
- 最简化Selenium环境安装
- 清除number输入框的上下箭头
- HDU5773-The All-purpose Zero-多校#41010-最长上升子序列问题
- .net 4下引用低版本.net类库发生异常的解决方案
- 让Entity Framework支持MySql数据库