synchronized 代码块间的同步性在使用同步synchronized代码块时需要注意的是,当一个线程访问object 的一个 
synchronized(this) 同步代码块时,其他线程对同一个object 中所有其他synchronized(this) 同步代码块的访问将被阻塞,这说明synchronized 使用的“对象监视器”是一个。
看例子:

//code 1

public class ObjectService {public void showService1() {synchronized (this) {System.out.println("这是方法1");System.out.println("线程开始睡眠,释放锁");//这里模拟一个非常耗时的业务System.out.println("线程睡眠结束");}}public void showService2() {synchronized (this) {System.out.println("这是方法2");System.out.println("线程开始睡眠,释放锁");//这里模拟一个非常耗时的业务System.out.println("线程睡眠结束");}}
}

执行结果:this是代表当前的对象两个同步代码块指向的是同一个对象(拥有的是同一把锁),所以当一个线程进入到一个同步代码块,尽管是耗时操作,其余同步方法也是阻塞,在执行完毕后,在执行另一个方法。这种方法影响执行效率

由于上面缺点,我们来看看非this同步代码块

//code 2

public class ObjectService {public void showService1() {Object o = new Object();synchronized (o) {System.out.println("这是方法1");System.out.println("线程开始睡眠,释放锁");//这里模拟一个非常耗时的业务System.out.println("线程睡眠结束");}}public void showService2() {Object o = new Object();synchronized (o) {System.out.println("这是方法2");System.out.println("线程开始睡眠,释放锁");//这里模拟一个非常耗时的业务System.out.println("线程睡眠结束");}}
}

执行过程:在一个同步方法执行耗时操作的时候,另一个线程可以执行另外一个同步方法,同步代码块使用的是非this,在进入每一次方法,都会产生一个对象监视器(锁),由于方法中所有东西,在运行结束,都会消失,所以,实际在上面代码中,产生两个锁,才会出现异步的情况,大大提高运行效率

参考:https://blog.csdn.net/venus321/article/details/79336873

有朋友提出疑问  “可是第二种synchronized根本锁不住,两个线程都可以同时访问同一个方法。加的这个锁没有任何作用,和不加一样!”

原因:

Object o = new Object();

对象内的两个方法 都生成了各自的引用变量

非静态方法上的synchronized修饰符要求执行方法时要获得对象的锁,如果已经进入A方法说明对象锁已经被取走,那么试图进入B方法的线程就只能在等锁池(注意不是等待池哦)中等待对象的锁。

如果两个方法上的的synchronized修饰符(注意new一次是生成了一个新的)不一致,就不能实现同步。所以code

对方法加锁的原因:

保证同一时刻只有一个线程执行这个方法。

感觉code2  不能体现加锁的意义。

认识synchronized(this)与synchronized(非this)相关推荐

  1. java中synchronized修饰静态方法和非静态方法有什么区别?

    Synchronized修饰非静态方法 Synchronized修饰非静态方法,实际上是对调用该方法的对象加锁,俗称"对象锁". Java中每个对象都有一个锁,并且是唯一的.假设分 ...

  2. 使用synchronized修饰静态方法和非静态方法有什么区别

    前言 最近被问到了这个问题,第一次回答的也是很不好,在此参考网上答案进行整理记录.供大家学习参考. Synchronized修饰非静态方法 Synchronized修饰非静态方法,实际上是对调用该方法 ...

  3. [转载] java synchronized静态同步方法与非静态同步方法,同步语句块

    参考链接: Java中的静态方法与实例方法 java synchronized静态同步方法与非静态同步方法,同步语句块 并发编程 线程同步 静态方法锁 非静态方法锁 同步块 进行多线程编程,同步控制是 ...

  4. java synchronized静态同步方法与非静态同步方法,同步语句块

    大纲:java线程知识体系 对代码进行同步控制我们可以选择同步方法,也可以选择同步块,这两种方式各有优缺点.同步块不仅可以更加精确的控制对象锁,还可以控制锁的作用域,何谓锁的作用域?锁的作用域就是从锁 ...

  5. 四、java多线程核心技术——synchronized同步方法与synchronized同步快

    一.synchronized同步方法 论:"线程安全"与"非线程安全"是多线程的经典问题.synchronized()方法就是解决非线程安全的. 1.方法内的变 ...

  6. synchronized(class)、synchronized(this)与synchronized(object)的区别分析

    JAVA中synchronized关键字能够作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块.假如再细的分类,synchronized可作用于instance变量.objec ...

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

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

  8. synchronized(this)、synchronized(class)与synchronized(Object)的区别

    在多线程开发中,我们经常看到synchronized(this).synchronized(*.class)与synchronized(任意对象)这几种类型同步方法.但是是否知道这几种写法有什么区别了 ...

  9. java 静态方法枷锁_Java synchronized静态方法使用synchronized加锁

    昆明达内Java培训的老师上一期讲了Java synchronized实例方法使用synchronized加锁,这一期给同学们讲Java synchronized静态方法使用synchronized加 ...

  10. java synchronized关键字_Java synchronized 关键字,你用的对吗?

    for (int i = 0; i < 5; i++) {System.out.println(Thread.currentThread.getName + " " + i) ...

最新文章

  1. EK算法网络流模板hdu1532
  2. springboot配置cxf
  3. centos7 php 404,CentOS7 Apache环境配置自定义404错误页面怎么解决
  4. 橙子云手机华为保修吗_华为云手机引关注!将替代传统手机?华为回应来了
  5. java lwjgl3_java-LWJGL 3鼠标移动
  6. Knockout中ViewModel与Model的互转
  7. html怎么把一段文字设置为连接到下一个网页的按钮,网页设计三合一模拟试题(一)...
  8. mysql —— 分表分区
  9. 两台电脑共享怎么设置_两台电脑共用键鼠的简单设置
  10. python中从键盘输入列表_在python中为列表使用原始输入
  11. 软件安装下载的镜像站、国内源
  12. 关于HTML中onSubmit属性的触发时机
  13. 怎么隐藏php版本,Linux服务器中怎样隐藏PHP版本
  14. 经纬创投:我们研究了200多家公司的融资条款,告诉你如何防止被“套路”
  15. 74款android开机动画,修改Android系统开机动画
  16. [乐意黎原创]联想G470老笔记本升级改造
  17. 登陆注册页面html代码(仿知乎)
  18. 完成基因序列(fasta格式)的提取,核苷酸计数,GC含量计算,DNA 翻译为 RNA,RNA 翻译为 蛋白质,反向序列获取的相关函数
  19. Django 框架图
  20. Pycharm下载与安装教程

热门文章

  1. 【图像识别与处理】图像相似度对比的几种办法
  2. AT89S51/52单片机详细英文缩写解释汇总
  3. 用友ERP-U8最新破解(再次更新版本,附安装过程中的解决办法)
  4. jmeter工具:JMETER_HOME environment variable is not defined 问题解决
  5. chatgpt赋能python:Python程序员必知的Geany配置技巧
  6. CMD命令之ECHO大全
  7. google输入法地址
  8. 3dmax学习8——曲面修改器
  9. 武汉市2010年 第六次全国人口普查主要数据公报
  10. 2022-2028全球与中国平板显示器用高纯溅射靶材市场现状及未来发展趋势