先看一段代码

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修饰方法和代码块的区别相关推荐

  1. date对象加十分钟_一张图讲解对象锁和关键字synchronized修饰方法(代码块)

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 每个对象在出生的时候就有一把钥匙(监视器Monitor),那么被synchronized 修饰的方法相当于给方法加了一个锁 ...

  2. Java. Static 修饰类_static 表示静态,它可以修饰属性,方法和代码块。

    (1)static 表示静态,它可以修饰属性,方法和代码块. 1.static修饰属性(类变量),那么这个属性就可以用类名.属性名来访问,也就是使这个属性成为本类的类变量,为本类对象所共有.这个属性就 ...

  3. 内部类、包、修饰符、代码块

    内部类: 内部类概念:将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类.其他类也称为外部类. 内部类分为成员内部类.局部内部类,内部类中可以直接访问外部类的 ...

  4. 【Java基础】第6章_面向对象(下)-1:static关键字、main方法、代码块、final关键字

    文章目录 1.关键字:static 1.1.static的使用 1.2.类变量 vs 实例变量内存解析 1.3.自定义 ArrayUtil工具类的优化 1.4.static 的应用举例 1.5.练习 ...

  5. synchronized修饰方法

    文章目录 前言 一.Synchronized修饰非静态方法 二.Synchronized修饰静态方法 三.类锁和对象锁的访问是不冲突的 四.总结 前言 直接说结论: 1.Synchronized修饰非 ...

  6. java中普通代码块,构造代码块,静态代码块的区别及代码示例

    本文转自:http://www.cnblogs.com/sophine/p/3531282.html 执行顺序:(优先级从高到低)静态代码块>main方法>构造代码块>构造方法. 其 ...

  7. 类的加载顺序和静态代码块和匿名代码块的区别

    静态代码块和匿名代码块的区别 静态块: static { } 匿名块: { }          静态块只在类第一次被加载的时候执行一次,一般用于进行初始化工作;         匿名块在每一次创建本 ...

  8. 同步函数与同步代码块的区别

    同步函数和同步代码块的区别: 同步函数使用的锁是 固定的this 同步代码的锁是任意对象 建议使用同步代码块, 转载于:https://www.cnblogs.com/liyunchuan/p/107 ...

  9. synchronized方法与synchronized代码块的区别

    2019独角兽企业重金招聘Python工程师标准>>> synchronized methods(){} 与synchronized(this){}之间没有什么区别,只是 synch ...

最新文章

  1. 《30天吃掉那只 TensorFlow2.0 》(附下载)
  2. KGK荧光喷码机编程指南
  3. 透视表提取不反复记录(3)-每组最小值
  4. c 结构体在声明时赋值_Java基础知识 初识Java 循环结构进阶 数组 数据类型 各种运算符...
  5. selinux= 为 disabled_「丁香园」五年没考过执医,就不要出来「为祸人间」了
  6. 解决 display 和 transition 冲突的问题
  7. 设计模式 笔记 命令模式 Command
  8. pandas和 excel 尝试
  9. 15.6. Plugin Hook 设计与实现
  10. Java学习笔记之设计模式(3)抽象工厂模式
  11. flex builder的安装
  12. ES5 标准对象说明
  13. VIJOS 1206 CoVH之再破难关
  14. kettle定时备份->mysql+mongoDB增量备份
  15. vue中clearInterval()清除定时器报timeout.close is not a function错误?
  16. 如何将英文文献完整翻译?公式都可以快速完整插入,比淘宝上的机翻要强一百倍!
  17. PEP最新提案推出,Python将上线重大更新,带来了哪些新功能?
  18. 密码-正则校验(数字、字母、特殊字符-任意组合)
  19. EFCore——Entry和Attach
  20. 最全的运营数据指标解读

热门文章

  1. Failed to install .apk on device 'emulator-5554': timeout解决方法
  2. android 走马灯效果
  3. Pytorch模型迁移和迁移学习,导入部分模型参数
  4. Java字符串常用操作
  5. HTML JAVASCRIPT CSS 大小写敏感问题
  6. 最简化Selenium环境安装
  7. 清除number输入框的上下箭头
  8. HDU5773-The All-purpose Zero-多校#41010-最长上升子序列问题
  9. .net 4下引用低版本.net类库发生异常的解决方案
  10. 让Entity Framework支持MySql数据库