1.Synchronized的本质是不让其他线程在同一对象上再加一把锁。
2.Synchronized使用范畴:
(1)修饰方法,使之成为被同步化区域的一员
protected synchronized void shutdown() {
this.interrupt();
}
(2)修饰某个程序代码块
synchronized(this) {
this.wait(); // wait indefinitely for a notification
}
(3)修饰对象,特别是容器类。容器类默认没有考虑线程安全问题,我们必须自行实现同步以确保共享数据在多线程存取下不会出错。例如:
synchronized(list){
list.add(...);
}
或者使用java.util.Collections提供的方法,来返回在存取数据时,会同步化的容器对象。需要注意的是,在使用Iterator遍历对象的时候,并没有保证线程安全,如有需要,我们还需要代码实现。
List list = Collections.synchronizedList(new ArrayList());
...
synchronized(list){
Iterator i = list.iterator();
while(i.hasNext()){
...
}
}
3.synchronized对性能的影响
同步化确保共享数据的同步,但当一个线程锁定同步化区域,其它线程等待它释放执行权时,会造成系统的延迟。在线程多的时候,必然造成一定的效率问题,必然大型网站多人联机时。
4.如果父类的方法加了Synchronized,子类重写方法必须也加Synchronized么?如果子类的方法重写时声明Synchronized并调用super,那么子类对象上到底有几把锁呢?会因为竞争产生死锁么?
子类重写方法可以加Synchronized也可以不加,这主要依赖于重进入机制。同一个线程在同一对象上还没释放之前加第二次锁是不会出问题的,这个锁其实根本就没有加,所以不会产生互斥。
分享到:
相关推荐
### Java编程思想读书笔记 #### 一、Java与C++的区别及内存管理 在学习Java的过程中,我们常常会拿它与C++进行比较。这两门语言虽然有着相似之处,但也有许多不同点。 1. **内存管理:** - C++提供了更为底层的...
在本篇【JAVA面向对象编程(孙卫琴)读书笔记(三)】中,我们将深入探讨Java编程语言的核心概念——面向对象编程。这篇读书笔记基于孙卫琴老师的著作,旨在帮助开发者更好地理解和应用面向对象的设计原则和技巧。下面...
《Java完美经典》读书笔记是Java开发者不可或缺的学习资源,它涵盖了Java编程的各个方面,旨在帮助读者深入理解Java语言,提升编程技巧。以下是对该书笔记的一些核心知识点的详细阐述: 1. **Java基础** - **变量...
4. **同步机制**:当多个线程访问同一资源时,必须使用`synchronized`关键字来保证线程安全,避免数据不一致。 5. **垃圾回收与线程**:由于每个线程在运行时都会注册,因此垃圾回收器不会轻易回收还在运行的线程。...
7. Java内置锁和锁的粒度:Java中的`synchronized`关键字用于实现内置锁,它保证了线程对共享资源的互斥访问。关于锁的粒度,需要根据实际情况来决定是使用细粒度还是粗粒度的锁。使用同步时,需要考虑代码同步块的...
11. **多线程**:线程的创建方式(继承Thread类、实现Runnable接口),线程同步与通信机制,如synchronized关键字、wait()、notify()和notifyAll()方法。 12. **文件和对象序列化**:如何将对象持久化到硬盘,以及...
笔记会涵盖Thread类和Runnable接口的使用,以及同步机制如synchronized关键字和Lock接口。 7. **Java Swing和JavaFX**:这两部分可能涉及GUI(图形用户界面)编程,如何使用组件创建窗口应用,如JButton、JFrame等...
Java的同步机制包括synchronized关键字、volatile变量、wait()和notify()方法、Lock锁(如ReentrantLock)等,这些都是用来解决多线程环境下数据一致性问题和避免竞态条件的关键工具。 在实际开发中,多线程编程...
Java中的`synchronized`关键字和`java.util.concurrent.atomic`包下的原子类可以提供原子性操作。 - **竞争条件**:当多个线程同时访问和修改一个共享资源,可能会导致不一致的结果,这就是竞态条件。避免竞态条件...
《BookReading:读书笔记》项目是一个专注于Java编程的个人学习资源库,旨在帮助开发者通过阅读和整理书籍来提升自己的技术能力。在这个项目中,你将找到一系列与Java相关的读书笔记,这些笔记涵盖了从基础概念到高级...
Java读书笔记是对Java编程语言深入理解的重要资源,尤其对于初学者而言,它们提供了一个系统性的学习路径。以下是一些从“谢耳朵JAVASE笔记”中可以提炼的关键知识点: 1. **Java基础知识**:Java是一种面向对象的...
理解和掌握线程同步机制,如synchronized关键字和wait/notify机制,是提升程序并发性能的重要步骤。 10. **文件和目录操作**:Java的File类提供了创建、删除、重命名文件和目录的方法,了解这些API可以帮助你在程序...
在这个名为"notes"的仓库中,我们可以推测它是一个个人的学习资源库,特别是针对读书笔记的整理。通过使用Markdown格式存储这些笔记,作者旨在创建一种清晰、简洁且易于阅读和维护的文本记录方式。 Markdown是一种...
配合"practicalJava读书笔记",读者可以更好地理解和消化书中的概念,笔记可能包括了作者的理解、实例代码、问题解答和实践经验分享,进一步巩固和拓展了理论知识。 学习《实用Java》中文版,不仅可以掌握Java编程...
这本书的读书笔记涵盖了多个关键知识点,旨在帮助读者深入理解Java并发编程的核心概念。 1. **线程和进程的区别** - **线程** 是程序执行的最小单位,一个进程中可以有多个线程同时执行,共享同一块内存空间,通信...
5. **内存模型**:定义了线程之间共享变量的访问规则,如volatile、synchronized和final关键字的实现。 OpenJDK7源码的阅读可以帮助我们理解这些组件的实现细节。例如: - **HotSpot虚拟机**:OpenJDK7默认的...
以下是我从我的读书笔记中整理出的一些容易被忽视的Java学习知识点。 1. **基本概念理解**:Java是一种面向对象的语言,但很多初学者会混淆面向过程和面向对象的区别。理解类、对象、继承、封装和多态等核心概念是...
读书笔记和示例代码 包括 线程基础/同步sync/并发concurrent/容器/线程池 示例代码 JUC容器的源码解析 Synchronized 同步容器 Concurrent 并发容器: Map/List/Queue 阻塞队列 JUC锁: CountDownLatch 闭锁 AQS 锁的...
学习如何创建和管理线程,理解同步机制(如synchronized关键字、wait()和notify()方法)对于编写高性能的Java应用至关重要。 7. **Swing和AWT**:作为Java的图形用户界面(GUI)工具包,Swing和AWT提供了许多组件...