1 说明
异常处理与并发机制是Java基本的语言特性,而理解Java Memory Model有助于正确的使用并发机制。
本篇仅指出基本知识点和一些注意点,不会说的太细,细节可以参照其它专门的资料。
2 异常
C++里面也有异常,但是不太完善,很多时候不被使用。而Java里的异常处理是完整的体系,不得不用,不得不去了解。主要是要了解以下方面:
try
,catch
,finally
代码运行线索,执行顺序,catch的顺序throw
与throws
关系,子类override
后的要求及原因- 异常的类与接口继承关系:
Throwable
,Exception
,Error
RuntimeException
的特殊性
3 并发
C/C++的标准库是没有提供并发的机制的,因为并发在不同的平台上是不一样的。而Java由于存在JVM的统一接口,这里提供了一套完整的并发处理在标准库中。
3.1 最基本的并发
一个接口Runnable
一个类Thread
几个方法:
public synchronized void start();
@override
public void run();
public final synchronized void join();
线程本地变量ThreadLocal
3.2 并发控制
- 关键字
synchronized
-
Object
类提供的方法wait()
与notify()
及notifyAll()
- 常用的锁类:
Lock
,ReadWriteLock
,ReentrantLock
,ReentrantReadWriteLock
3.3 线程池
了解以下类用法:
- Executors
- ThreadFactory
- ExecutorService
- ScheduledExecutorService
- ThreadPoolExecutor
- ScheduledThreadPoolExecutor
- Future
- ScheduleFuture
了解周期任务中scheduleAtFixRate
与scheduleAtFixDelay
差别
4 JMM
理解重排序与happens-before
理解为毛double-check的做法不是线程安全的。
附double-check示例
public class SingletonSample {
private static SingletonSample instance;
private SingletonSample(){}
public static SingletonSample getInstance() {
if (instance == null) {
synchronized(SingletonSample.class) {
if (instance == null) {
instance = new SingletonSample();
}
}
}
return instance;
}
}