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作为所有偶数序列生成器的基类:

  canceled作为boolean型的变量,是原子性(Atomic)的,这意味着对它的简单操作,如…
Read more

Concurrency: Basic Threading (3)

9. Coding variations 9.1. 直接继承Thread   创建任务除了通过实现Runnable接口,也可以通过直接继承Thread的方式来实现。

9.2. 自管理Runnable   还有一种自管理Runnable的用法,由实现Runnable的类自己创建并开始线程。 [crayon-5bee1402e09347…
Read more

Concurrency: Basic Threading (2)

5. Sleep   Sleep()可以在指定时间内阻塞当前任务的执行。

这里使用了Java SE 5中引入的TimeUnit,显式地指明了时间单位MILLISECONDS,具有更好的可读性。这里在run()中捕获sleep()抛出的InterruptedException,异常不会跨线程传递,需要在抛出异常的任务中就地处理。   …
Read more

Concurrency: Basic Threading (1)

本系列是Thinking in Java (Fourth Edition)中Concurrency一章的内容总结。主要关注实例、常见用法和陷阱,便于日后查用。 1. Defining Tasks   任务(Task)用于描述希望并发运行的活动。定义一个任务,只需实现Runnable接口,并在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可以在运行时改变大小。

5.1. Creating an ArrayList   Java 5之前可以使用以下的方法创建ArrayList,…
Read more