1 說明
異常處理與并發(fā)機(jī)制是Java基本的語言特性,而理解Java Memory Model有助于正確的使用并發(fā)機(jī)制。
本篇僅指出基本知識點(diǎn)和一些注意點(diǎn),不會說的太細(xì),細(xì)節(jié)可以參照其它專門的資料。
2 異常
exception.png
C++里面也有異常,但是不太完善,很多時(shí)候不被使用。而Java里的異常處理是完整的體系,不得不用,不得不去了解。主要是要了解以下方面:
try
,catch
,finally
代碼運(yùn)行線索,執(zhí)行順序,catch的順序throw
與throws
關(guān)系,子類override
后的要求及原因- 異常的類與接口繼承關(guān)系:
Throwable
,Exception
,Error
RuntimeException
的特殊性
3 并發(fā)
C/C++的標(biāo)準(zhǔn)庫是沒有提供并發(fā)的機(jī)制的,因?yàn)椴l(fā)在不同的平臺上是不一樣的。而Java由于存在JVM的統(tǒng)一接口,這里提供了一套完整的并發(fā)處理在標(biāo)準(zhǔn)庫中。
bingxing.JPG
3.1 最基本的并發(fā)
一個接口Runnable
一個類Thread
幾個方法:
public synchronized void start();
@override
public void run();
public final synchronized void join();
線程本地變量ThreadLocal
3.2 并發(fā)控制
- 關(guān)鍵字
synchronized
-
Object
類提供的方法wait()
與notify()
及notifyAll()
- 常用的鎖類:
Lock
,ReadWriteLock
,ReentrantLock
,ReentrantReadWriteLock
3.3 線程池
了解以下類用法:
- Executors
- ThreadFactory
- ExecutorService
- ScheduledExecutorService
- ThreadPoolExecutor
- ScheduledThreadPoolExecutor
- Future
- ScheduleFuture
了解周期任務(wù)中scheduleAtFixRate
與scheduleAtFixDelay
差別
4 JMM
jmm.jpg
理解重排序與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;
}
}