Concurrency: Sharing Resources (2)
3 Atomicity and Volatility 原子操作(Atomic Operation)指的是不会被线程调度打断的操作。对除了long和double以外基本类型的简单操作(如赋值和返回值)是原子性的。JVM允许以两次32位操作的形式读写64位的值(long和double型变量),导致读写期间可能发生上下文切换。为了使long和double得到原子性,可以使用volatile来修饰lo…
Read more
learn, build, evaluate
3 Atomicity and Volatility 原子操作(Atomic Operation)指的是不会被线程调度打断的操作。对除了long和double以外基本类型的简单操作(如赋值和返回值)是原子性的。JVM允许以两次32位操作的形式读写64位的值(long和double型变量),导致读写期间可能发生上下文切换。为了使long和double得到原子性,可以使用volatile来修饰lo…
Read more
1. Improperly accessing resources 考虑这样一个例子:一个任务产生偶数序列,另外一个任务检查第一个任务产生的数字是否为偶数。 定义抽象类IntGenerator作为所有偶数序列生成器的基类: public abstract class IntGenerator { private volatile boolean canceled = false; publ…
Read more
9. Coding variations 9.1. 直接继承Thread 创建任务除了通过实现Runnable接口,也可以通过直接继承Thread的方式来实现。 public class SimpleThread extends Thread { private int countDown = 5; private static int threadCount = 0; public Simp…
Read more
5. Sleep Sleep()可以在指定时间内阻塞当前任务的执行。 import java.util.concurrent.*; public class SleepingTask extends LiftOff { public void run() { try { while(countDown– > 0) { System.out.print(status()); // Old…
Read more
本系列是Thinking in Java (Fourth Edition)中Concurrency一章的内容总结。主要关注实例、常见用法和陷阱,便于日后查用。 1. Defining Tasks 任务(Task)用于描述希望并发运行的活动。定义一个任务,只需实现Runnable接口,并在run()方法中给出任务的具体行为: public class LiftOff implements Run…
Read more
1. Understanding Exception Types Java中异常的种类如图1所示。 Error用于指示严重错误,程序不应尝试从错误中恢复。RuntimeException和其子类表示运行时异常,用于指示意外的非致命异常,也被称为unchecked exception。 Runtime (Unchecked) exception是异常的一个种类,并不是指在程序运行期间(r…
Read more
3. Implementing Interfaces 3.1. Defining an Interface 接口不能直接实例化。 一个接口中可以不包含任何方法。 接口不能标记为final。 顶层接口默认具有public或default的访问限制和abstract修饰符,将接口标记为private/protected/final会导致编译错误。此条不适用于内部接口。 接口中的所有非default方法…
Read more
1. Introducing Class Inheritance 1.1. Applying Class Access Modifiers 一个文件中可以有多个类,但最多只能有一个public类。 1.2. Defining Constructors 1.2.1. Understanding Compiler Enhancements 可以在子类的构造器中通过super() 显式地调用父类…
Read more
1. Designing Methods 1.1. Access Modifiers private default protected public 1.2. Optional Specifiers static abstract final synchronized native strictfp: strict float point,精确浮点,参考Wiki。 可选说明符要放在返回值类型…
Read more
5. Understanding an ArrayList 与数组类似,ArrayList是一个有序序列,且允许重复与元素。数组中元素的个数在声明时就已经确定,不可再更改,ArrayList可以在运行时改变大小。 import java.util.* // import whole package including ArrayList import java.util.ArrayList; …
Read more