Java

Concurrency: Sharing Resources (2)

3 Atomicity and Volatility   原子操作(Atomic Operation)指的是不会被线程调度打断的操作。对除了long和double以外基本类型的简单操作(如赋值和返回值)是原子性的。JVM允许以两次32位操作的形式读写64位的值(long和double型变量),导致读写期间可能发生上下文切换。为了使long和double得到原子性,可以使用volatile来修饰lo…
Read more

Concurrency: Sharing Resources (1)

1. Improperly accessing resources   考虑这样一个例子:一个任务产生偶数序列,另外一个任务检查第一个任务产生的数字是否为偶数。   定义抽象类IntGenerator作为所有偶数序列生成器的基类: public abstract class IntGenerator { private volatile boolean canceled = false; publ…
Read more

Concurrency: Basic Threading (3)

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

Concurrency: Basic Threading (1)

本系列是Thinking in Java (Fourth Edition)中Concurrency一章的内容总结。主要关注实例、常见用法和陷阱,便于日后查用。 1. Defining Tasks   任务(Task)用于描述希望并发运行的活动。定义一个任务,只需实现Runnable接口,并在run()方法中给出任务的具体行为: public class LiftOff implements Run…
Read more

OCA/OCP Java Note (11): Exceptions

1. Understanding Exception Types   Java中异常的种类如图1所示。   Error用于指示严重错误,程序不应尝试从错误中恢复。RuntimeException和其子类表示运行时异常,用于指示意外的非致命异常,也被称为unchecked exception。   Runtime (Unchecked) exception是异常的一个种类,并不是指在程序运行期间(r…
Read more

OCA/OCP Java Note (10): Class Design (2)

3. Implementing Interfaces 3.1. Defining an Interface 接口不能直接实例化。 一个接口中可以不包含任何方法。 接口不能标记为final。 顶层接口默认具有public或default的访问限制和abstract修饰符,将接口标记为private/protected/final会导致编译错误。此条不适用于内部接口。 接口中的所有非default方法…
Read more

OCA/OCP Java Note (7): Core Java APIs (2)

5. Understanding an ArrayList   与数组类似,ArrayList是一个有序序列,且允许重复与元素。数组中元素的个数在声明时就已经确定,不可再更改,ArrayList可以在运行时改变大小。 import java.util.* // import whole package including ArrayList import java.util.ArrayList; …
Read more