本文介绍: synchronized 是 Java 中用于实现线程同步的关键字,它提供了一种简单且有效的方式来控制多个线程对共享资源的访问。synchronized 的作用是确保在同一时刻只有一个线程可以进入被 synchronized 修饰的代码块或方法,从而避免多个线程同时修改共享数据而引发的数据不一致性和并发访问问题。
基本使用
源码解析
在Java虚拟机中,每个对象头中都包含一部分用于实现synchronized的相关信息。这些信息包括:
需要注意的是,synchronized关键字可以修饰方法和代码块。在方法上修饰的synchronized表示对整个方法进行同步,而在代码块上修饰的synchronized表示对该代码块进行同步,使用的锁对象通常是方法所属对象或指定的对象。
这里给出一份简化的 synchronized 关键字的源码:
常见面试题
灵活性:Lock 机制比 synchronized 关键字更灵活,因为它提供了更多的锁定操作,例如可以实现公平锁和非公平锁,还可以实现读写锁。
可中断性:Lock 机制可以中断一个线程的等待,而 synchronized 关键字不能。
可重入性:synchronized 关键字是自动可重入的,而 Lock 机制必须手动实现。
性能:如果比较的是相同的锁定操作,synchronized 关键字通常比 Lock 机制更快,因为它是内置的。
总体而言,在简单的同步情况下,synchronized 关键字更方便,但是在需要更多灵活性的情况下,Lock 机制可能是一个更好的选择。
好书推荐
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。