Java多线程原理:synchronized同步锁的使用_极悦注册
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java多线程原理:synchronized同步锁的使用

Java多线程原理:synchronized同步锁的使用

更新时间:2020-01-18 14:58:55 来源:极悦 浏览3248次


Java多线程原理:synchronized同步锁的使用


  作用和用法


  在多线程对共享资源进行并发访问方面,JDK提供了synchronized关键字来进行线程同步,实现多线程并发访问的线程安全。synchronized的作用主要体现在三个方面:(1)确保线程互斥地访问同步代码;(2)保证共享变量的线程可见性;(3)禁止指令重排。其中(2)和(3)相当于volatile关键字的作用。


  synchronized可以用在代码的以下地方:


  (1)静态方法:将类对象自身作为monitor对象,对该类所有使用了sychronized修饰的静态方法进行同步,即任何时候只能存在一个线程在调用该类的使用了synchronized修饰的静态方法,其他调用了该类的使用了synchronized修饰的静态方法的线程需要阻塞;


  (2)普通成员方法:使用类的对象实例作为monitor对象,该类所有使用了synchronized修饰的成员方法,在任何时刻只能被一个线程访问,其他线程需要阻塞;


  (3)代码块:使用某个对象作为monitor对象,通常为一个普通的private成员变量,如private Object object = new Object();,这样所有使用了该object对象的同步块,在任何时候只能存在一个线程访问。


  synchronized可以与monitor对象的wait,notify,notifyAll方法一起来使用,实现线程之间的通信,如实现生产者和消费者模型。其中多个线程共享一个monitor对象,在线程持有synchronized锁时,才能调用monitor的wait,notify或者notifyAll,分别用于释放monitor锁,阻塞休眠,等待其他线程;通知和唤醒其中一个阻塞休眠的线程,让该线程去获取monitor锁;通知所有阻塞休眠的线程去竞争monitor锁。


  synchronized使用方便,无需显示地在应用代码中加锁和解锁,只需在对应的方法或者代码块中使用synchronized关键字修饰即可,由JVM自身实现自动地加锁和释放锁。


  synchronized修饰的范围越小,线程并发度越高,性能越好,所以通常使用同步代码块,而不是同步方法来缩小同步范围,优化性能。


Java多线程原理:synchronized同步锁的使用


      以上就是极悦注册机构小编介绍的“Java多线程原理:synchronized同步锁的使用”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。


  相关内容


  


  


  


提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>