更新时间:2020-01-18 14:58:55 来源:极悦 浏览3248次
作用和用法
在多线程对共享资源进行并发访问方面,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同步锁的使用”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
相关内容
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习