多线程一直Java开发中的难点,也是面试中的常客,趁着还有时间,打算巩固一下JUC方面知识,我想机会随处可见,但始终都是留给有准备的人的,希望我们都能加油!!!
沉下去,再浮上来,我想我们会变的不一样的。
讲Lock接口之前先让我们一起来回顾一下Synchronized关键字吧。我想我们学Java开发这么久,不可能还有那个小伙伴没有用过synchronized


夕阳

一、synchronized 作用范围:

synchronized 是 Java 中的关键字,是一种同步锁。它修饰的对象有以下几种:

  1. 修饰某一处代码块,被修饰的代码块称为同步语句块。作用范围就是{}之间。作用的对象是调用这个代码块的对象。

    synchronized (this){System.out.println("同步代码块 ");
    }
    
  2. 修饰在方法上,被修饰的方法就称为同步方法。作用范围则是整个方法。作用的对象则是调用这个方法的对象。

    public synchronized void sale() {}
    

    :1)synchronized 关键字不能被继承,如果父类中某方法使用了synchronized 关键字,字类又正巧覆盖了,此时,字类默认情况下是不同步的,必须显示的在子类的方法上加上才可。当然,如果在字类中调用父类中的同步方法,这样虽然字类并没有同步方法,但子类调用父类的同步方法,子类方法也相当同步了。

  3. . 修饰某个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象

        public static synchronized void test(){}
    
  4. 修饰某个类,其作用的范围是 synchronized 后面括号括起来的部分,作用的对象是这个类的所有对象

    class Ticket {public void sale() {synchronized (Ticket.class) {}}
    }
    

二、案例:

最后:我们拿synchronized 写一下多线程中的卖票的经典案例:

public class SynchronizedDemo {public static void main(String[] args) {Ticket ticket = new Ticket();new Thread(() -> {for (int i = 0; i < 40; i++) {ticket.sale();}}, "A").start();new Thread(() -> {for (int i = 0; i < 40; i++) {ticket.sale();}}, "B").start();new Thread(() -> {for (int i = 0; i < 40; i++) {ticket.sale();}}, "C").start();}
}class Ticket {//票数private int number = 30;//操作方法:卖票public synchronized void sale() {//判断:是否有票if (number > 0) {System.out.println(Thread.currentThread().getName() + " : " + (number--) + " " + number);}}
}

三、总结:

synchronized 的同步效率非常低,因为一个如果某一块代码被synchronized 修饰了,当某一个线程进入了synchronized 修饰的代码块,那么其他线程只能一直等待,等待获取锁的线程释放锁,才能进入再次进入同步代码块。

获取锁的线程释放锁的情况只有两种:

  1. 正常执行完,然后释放锁。
  2. 执行过程中,发生异常,JVM让线程自动释放锁。

那么你试想一个如果获取到锁的这个线程,由于一些等待IO原因或其他原因被堵住了,但是又不能释放锁,其他线程就只能在synchronized的门口看着啦,你想一下这个效率吧,出现一次,可能就把人心态玩没啦哈。

JUC系列(二)回顾Synchronized关键字相关推荐

  1. Java多线程学习(二)synchronized关键字(1)

    转载请备注地址: https://blog.csdn.net/qq_34337272/article/details/79655194 Java多线程学习(二)将分为两篇文章介绍synchronize ...

  2. JUC系列二:Lock接口

    一.多线程编程模板 1.线程 操作 资源类 2.高内聚 低耦合 二.实现步骤 1.创建资源类 2.资源类里创建同步方法.同步代码块 三.卖票程序 3.1.卖票程序之synchronized保证线程安全 ...

  3. JUC系列(一)什么是JUC?

    多线程一直Java开发中的难点,也是面试中的常客,趁着还有时间,打算巩固一下JUC方面知识,我想机会随处可见,但始终都是留给有准备的人的,希望我们都能加油!!! 沉下去,再浮上来,我想我们会变的不一样 ...

  4. java线程同步以及对象锁和类锁解析(多线程synchronized关键字)

    一.关于线程安全 1.是什么决定的线程安全问题? 线程安全问题基本是由全局变量及静态变量引起的. 若每个线程中对全局变量.静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的:若有多个线 ...

  5. 【Java进阶营】JAVA多线程基础学习二:synchronized

    本篇主要介绍Java多线程中的同步,也就是如何在Java语言中写出线程安全的程序,如何在Java语言中解决非线程安全的相关问题,没错就是使用synchronized. 一.如何解决线程安全问题? 一般 ...

  6. Java并发编程学习笔记——volatile与synchronized关键字原理及使用

    Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令. 一.vo ...

  7. JUC系列(五)| Synchonized关键字进一步理解

    多线程一直Java开发中的难点,也是面试中的常客,趁着还有时间,打算巩固一下JUC方面知识,我想机会随处可见,但始终都是留给有准备的人的,希望我们都能加油!!! 沉下去,再浮上来,我想我们会变的不一样 ...

  8. cookie里面用到的关键字_晓龙吊打面试官系列:synchronized关键字入门(同步方法与同步代码块)...

    文章目录 一. 线程安全问题 二.synchronized简介 1) 原子性 2) 可见性 3) 有序性 4)可重入 1. 什么是synchronized 2.什么是同步 3.synchronized ...

  9. AQS源码二探-JUC系列

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

最新文章

  1. python123注册需要输入真实姓名和学校吗_python-----作业完成--学校选课系统
  2. Dispatch_queue
  3. chrome浏览器 控制台创建 js脚本 并执行
  4. 移动互联网高级开发学习笔记
  5. Spring Boot 开发web 项目
  6. dell的1501和640m,买哪个好呢?
  7. 1713. 得到子序列的最少操作次数
  8. nginx里配置跨域
  9. 阿里数据中台核心产品揭秘
  10. awk命令详解+示例
  11. VSS 2005 安装,配置简明手册 及VSS2005下载地址
  12. matlab模拟小球碰撞,在MATLAB中实现模拟小球上抛和反弹运动
  13. 电子词典系统vc++_MFC 电子词典
  14. Python之路【第二十篇】:python项目之旧版抽屉新热榜
  15. 说说 Jaspersoft Studio 的主界面和报表设计视图
  16. 【超宽带MIMO】超宽带MIMO雷达对目标的检测及成像
  17. 【STM32 .Net MF开发板学习-12】跳动的音符(PWM合成)
  18. Android快速SDK(12)文本pdf阅读器PdfViewer【傻瓜模式】
  19. Android面试题收集(有具体答案)
  20. 自建kafka和公有云kafka对比

热门文章

  1. PM 后台配置TCODE
  2. 金山办公或将陷入低增长,再去哪里找客户?
  3. pandas pivot 占比_数据处理进阶pandas入门(十八)
  4. 有小数点的补码怎么算_写给投资小白,指数基金,在哪买?怎么买?
  5. python解压文件_Python压缩和解压缩文件(zip/unzip)详解
  6. java compareto date_int compareTo(Date anotherDate)
  7. 青海大学计算机专业在全国排名,青海大学专业排名
  8. 在将计算机技术应用于会计工作的初期,所开发的会计核算软件主要用于,电算化考前试七.doc...
  9. cytoscape要求的JAVA版本_微生物研究必备:Cytoscape绘制网络图(一)
  10. 徐艳 中国科学院成都计算机,互动、碰撞!精彩纷呈!成都市中职计算机专业菜单培训在双流建校举行!...