发布
对象的发布是指:使对象能够在当前作用域之外的代码中使用。例如在一个非私有的方法中将私有属性的对象引用直接返回。
逸出
是指当某个不该被发布的对象被发布出去。例如,如果在对象完成构造之前就将其发布出去,就会破坏线程安全性。
警惕this引用逸出。当从对象的构造函数中发布对象的时候,只是发布了一个未构造完成的对象。在构造过程中使用this引用逸出的一个常见的现象是:在构造函数中启动一个线程,无论是显式创建(将它传递给构造函数)还是隐式创建(由于Thread或者Runable是该对象的一个内部类),this引用都会被新创建的线程共享。对应this应用逸出的方法是,将构造函数声明为私有,同时提供一个工厂方法提供对象,在工厂方法中完成构造并且发布。
安全发布的常用模式
要安全的发布一个对象,对象的引用及对象的状态必须同时对其他线程可见
- 在静态初始化函数中初始化一个对象的引用(由于静态初始化器由JVM在类的初始化阶段机型,由于JVM内部存在同步机制,因此通过此方式初始化的任何对象都可以被安全的发布)。
- 将对象的引用保存在volatile类型域或者AtomReference对象中。
- 将对象的引用保存到某个正确构造对象的final类型域中。
- 将对象的引用保存到一个由锁保护的域中(比如Vector或者synchronizedList之类的线程安全的容器)。
相关推荐
根据提供的文件信息,我们可以归纳出以下关键知识点,这些知识点涵盖了分布式系统...以上总结涵盖了L1导论——笔记.pptx文件中的主要内容,包括分布式系统的基本概念、面临的挑战、课程安排以及MapReduce的工作原理等。
与“和考研的朋友一起分享一下”相呼应,这份笔记具有极高的共享价值,旨在促进考生之间的交流,共同提高学习效率。 【标签】"和大家分享一下"进一步强调了这份资料的分享性质,意味着它不仅仅是一份个人的学习笔记...
### Linux网络编程笔记(修订版) #### 基本概念 ...通过以上内容的学习和实践,可以更加深入地理解Linux网络编程的基本概念、常用接口以及常见的服务器模型,并能够编写出稳定高效的网络应用程序。
面向对象的开发方法包括面向对象的分析、面向对象的设计和面向对象的程序设计。( √) 7. 软件危机的主要表现是软件的需求量迅速增加,软件价格上升。(×) 8. 软件工具的作用是为了延长软件产品的寿命。(×) 9. ...
线程同步和通信(如synchronized、wait/notify、锁等)是Java并发编程的核心内容。 这些知识点涵盖了JVM的基本概念和高级特性。通过深入研究和实践这些代码资源,开发者可以更好地理解和优化Java应用程序,提升系统...
Java是一种面向对象的、跨平台的编程语言,由Sun Microsystems公司于1995年发布。它的设计目标是“一次编写,到处运行”,这意味着用Java编写的程序可以在任何支持Java的平台上运行,无需重新编译。这种特性使得Java...
在标签“C 语言,编程”中,我们得到了文档涵盖的主要领域——C语言编程。C语言作为历史上最流行的编程语言之一,它对现代计算机科学产生了深远的影响。C语言以其接近硬件的操作能力和灵活性闻名,广泛应用于系统...
它构建在Hadoop之上,能够将SQL(结构化查询语言)转换为MapReduce任务,使得非程序员也能方便地操作和查询大数据。以下是关于Hive的一些核心知识点: 1. **Hive架构**:Hive由多个组件组成,包括Hive Server、...
《ORANGE’S:一个操作系统的实现》这本书深入浅出地介绍了操作系统的设计与实现,其中第24章主要探讨了进程间通信的第二部分。在这一章节中,作者可能会涉及多种IPC机制,包括管道、信号量、消息队列、共享内存等,...
9. **网络编程**:涵盖网络编程基础知识、服务器和客户端程序开发,以及利用IO复用实现高效并发处理。 10. **系统时间的实现**:讲解如何在嵌入式Linux系统中管理和实现精确的时间同步。 11. **关于进程的体会**:...
### 嵌入式Linux入门知识点详解 ...通过以上内容可以看出,《嵌入式入门笔记(阿南)》不仅是一份详细的嵌入式Linux学习资料,也是一本实践性强的参考手册,适合初学者和有一定经验的开发者参考学习。
7. **多线程**:JVM支持多线程编程,每个线程都有自己的程序计数器、虚拟机栈、本地方法栈,共享堆内存。线程同步和通信机制如synchronized关键字、wait()、notify()方法以及Lock接口,是实现并发的关键。 8. **类...
《Android学习笔记——Java编程基础与实战应用》 在Android开发领域,Java语言扮演着至关重要的角色。Android Studio是Google官方推荐的开发环境,而它主要支持的就是Java语言。本篇将深入探讨Java编程基础以及如何...
1. **C++编程基础**:理解类、对象、继承、多态等面向对象编程概念。 2. **网络编程**:学习TCP/IP协议,使用Winsock API进行网络通信,处理连接、发送和接收数据。 3. **多线程编程**:实现实时聊天可能需要同时...
班级网站是一个集信息发布、资源共享、互动交流于一体的网络平台,对于学生和教师来说,它提供了便捷的沟通渠道,增强了班级的凝聚力。在毕业设计中,构建一个班级网站是一个常见的实践项目,能帮助学生将所学的IT...
《eMule-VeryCD-src.rar_VeryCD_cryptlib:深入解析VeryCD电驴的源码与cryptlib加密库》 在IT领域,开源软件的源代码是开发者们宝贵的资源,它们为学习、研究和创新提供了无尽的可能。今天我们将深入探讨一个特别的...
6. **编译器与汇编语言**:学习汇编语言编程,了解编译器的作用和工作流程,包括词法分析、语法分析、语义分析和代码生成阶段。 7. **操作系统**:深入理解操作系统的五大功能——进程管理、内存管理、文件系统、I/...
Java虚拟机(JVM)是Java编程语言的核心组成部分,它为Java程序提供了跨平台的运行环境。OpenJDK是Java Development Kit(JDK)的一个开源实现,由甲骨文公司和全球开发者社区共同维护。OpenJDK7是OpenJDK项目的一个...
这一部分介绍了具体的项目实践案例,涵盖了各种硬件设备的驱动开发、网络编程等内容。 1. **进程间隔定时器** - **概念介绍**:理解进程间隔定时器的基本原理。 - **数据结构**:定义相关数据结构。 - **操作...
- **类与对象**:面向对象是Java的核心,了解类的定义、对象的创建、封装、继承和多态性至关重要。 - **访问修饰符**:public、private、protected和默认的访问权限在类和成员间的控制作用不容忽视。 2. **控制流...