java并发编程实战P58
私有构造函数捕获:私有构造函数进行线程安全地对象复制
转发:http://atbug.com/private-constructor-capture-idiom/
/**
* 将拷贝构造函数实现为this(p.x, p.y),那么会产生竞态条件,而私有构造函数则可以避免这种竞态条件。这是私有构造函数捕获模式的一个实例 */
public class SafePoint {
private int x, y;
// 私有内部构造函数
private SafePoint(int[] a) {
this(a[0], a[1]);
}
public SafePoint(SafePoint p) {
// 线程安全的获取x、y坐标,避免x、y不一致产生数据竟态竞争
this(p.get());
}
public SafePoint(int x, int y) {
this.x = x;
this.y = y;
}
public synchronized int[] get() {
return new int[]{x, y};
}
public synchronized void set(int x, int y) {
this.x = x;
this.y = y;
}
}
分享到:
相关推荐
理解类与对象的概念,以及如何通过构造函数创建对象,是学习Java的关键步骤。同时,还需要掌握封装、继承和多态这三大面向对象特性,它们是Java面向对象编程的核心。 3. **包**:包是Java中管理类的一种方式,可以...
理解反射的基本使用,如Class对象的获取、构造函数和方法的调用,以及访问私有成员,对于解决一些高级问题至关重要。 5. **泛型**:泛型提高了代码的类型安全性,防止了类型转换错误。理解泛型的基本语法,如泛型类...
使用构造函数初始化对象,提倡单例模式以控制类的实例化。 7. **接口与实现**:接口定义行为,类实现接口。接口中方法默认为`abstract`,常量使用`public static final`修饰。 8. **集合框架**:合理使用`List`、`...
5. **构造函数**:学习如何初始化对象,理解默认构造函数和自定义构造函数的区别和用法。 6. **异常处理**:掌握如何使用try-catch语句捕获和处理程序运行时可能出现的错误,提高程序的健壮性。 7. **集合框架**:...
9. **反射**:`java.lang.reflect`包提供了反射API,允许程序在运行时动态访问类和对象的信息,包括调用私有方法和构造器。 10. **日期与时间**:`java.util.Date`、`java.time`包提供了处理日期和时间的方法,如`...
首先,类与对象是Java中的基本构造块。类是定义数据和操作数据的方法的蓝图,而对象是类的实例,具备类所定义的属性和行为。在Java中,通过使用关键字`class`来创建类,并使用`new`关键字实例化对象。理解类和对象的...
《Objects-Java-SE-11-Developer-1Z0-819-OCP-Course ---第1部分》是针对Java SE 11开发者认证考试1Z0-819的培训课程,主要关注Java对象导向编程的核心概念和技术。本课程内容丰富,旨在帮助学员深入理解Java语言的...
- 构造函数、方法和字段的反射调用。 9. **JVM**: - 类加载机制:加载、验证、准备、解析、初始化。 - 类加载器:Bootstrap ClassLoader、Extension ClassLoader、AppClassLoader。 - 虚拟机内存模型:堆、栈...
17. 缺省构造函数:如果类中没有显式定义构造函数,Java会自动生成一个无参的缺省构造函数。 18. 数组下标:数组元素的下标从0开始,可以是整数或整型表达式。 19. 构造函数继承:构造函数不是继承的一部分,子类...
源码中可能涵盖了类和对象的创建、继承、接口实现、抽象类、构造函数、访问修饰符以及重写和重载方法等概念。 4. **集合框架**:Java集合框架包括List、Set、Queue和Map接口及其实现,如ArrayList、LinkedList、...
- 构造器:了解构造函数的作用,包括默认构造器和自定义构造器。 3. **异常处理** - 异常概述:理解异常的分类,如检查异常和运行时异常,以及如何抛出和捕获异常。 - try-catch-finally:学习如何使用try-catch...
- 使用构造函数初始化对象,保持类的私有化。 - 尽量减少全局变量的使用,提高代码的封装性。 - 为方法添加默认访问修饰符(无修饰符),除非需要特定的访问级别。 4. **异常处理** - 不要忽视异常,确保每个...
Java语言规范和JVM规范是理解Java编程语言和其运行机制的基石,它们定义了Java程序的语法、语义以及虚拟机如何执行这些程序。在Java SE 7、8、9这三个版本中,规范都有所更新,以适应技术的发展和需求的变化。 Java...
- **局部变量**: 在方法或构造函数内部定义。 - **实例变量**: 在类体内部但方法外部定义。 - **类变量**(静态变量): 使用`static`关键字定义。 **3.4 方法重载** - 在同一个类中,多个方法可以有相同的名字但...
Java语言程序设计期末考试涉及了Java编程的基础概念和特性,包括异常处理、继承、接口、抽象类、字符串比较、类的生命周期、构造函数、导入语句、对象赋值、Applet、原始数据类型、访问修饰符、方法签名、类的加载...
此外,类的构造函数用于初始化新创建的对象,也是源代码中常见的部分。 在Java中,对象是类的实例。源代码可能展示了如何使用`new`关键字创建对象,并调用其方法执行特定任务。同时,书中可能包含对静态和非静态...
它包含两个按钮、一个标签,并定义了构造函数,用于添加组件和设置布局。`JButton`, `JLabel` 和 `JPanel` 是 Swing 中用于构建 GUI 的组件。 10. **事件监听** - 在实际的 GUI 应用中,通常需要为组件添加事件...
4. **重用对象,避免对象创建**:提倡使用`StringBuilder`进行字符串连接,以及使用`Arrays.copyOf()`而非复制构造函数来复制数组,以提高性能。 5. **接口与抽象类**:解释了接口与抽象类之间的区别,以及如何选择...
JavaBean是一种特殊的Java类,它遵循一些约定,如使用默认无参构造函数、私有属性、公共getter和setter方法等。 #### 5.9 包 `package` 包是Java中用于组织类的一种机制,可以避免类名冲突,并控制类的可见性。 #...
- 至少有一个无参数的构造函数,以便于实例化。 - 为了数据持久化,通常实现Serializable接口。 3. **Java基本数据类型**:Java有4类8种基本数据类型,包括布尔型(boolean)、字符型(char)、整数型(byte, ...