从C/C++到Java (2) 异常、并发与JMM

1 说明

异常处理与并发机制是Java基本的语言特性,而理解Java Memory Model有助于正确的使用并发机制。
本篇仅指出基本知识点和一些注意点,不会说的太细,细节可以参照其它专门的资料。

2 异常

从C/C++到Java (2) 异常、并发与JMM_第1张图片
exception.png

C++里面也有异常,但是不太完善,很多时候不被使用。而Java里的异常处理是完整的体系,不得不用,不得不去了解。主要是要了解以下方面:

  • try, catch, finally代码运行线索,执行顺序,catch的顺序
  • throwthrows关系,子类override后的要求及原因
  • 异常的类与接口继承关系:Throwable, Exception, Error
  • RuntimeException的特殊性

3 并发

C/C++的标准库是没有提供并发的机制的,因为并发在不同的平台上是不一样的。而Java由于存在JVM的统一接口,这里提供了一套完整的并发处理在标准库中。

从C/C++到Java (2) 异常、并发与JMM_第2张图片
bingxing.JPG

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()
  • 常用的锁类:LockReadWriteLockReentrantLockReentrantReadWriteLock

3.3 线程池

了解以下类用法:

  • Executors
  • ThreadFactory
  • ExecutorService
  • ScheduledExecutorService
  • ThreadPoolExecutor
  • ScheduledThreadPoolExecutor
  • Future
  • ScheduleFuture

了解周期任务中scheduleAtFixRatescheduleAtFixDelay差别

4 JMM

从C/C++到Java (2) 异常、并发与JMM_第3张图片
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;
    }
}

你可能感兴趣的:(从C/C++到Java (2) 异常、并发与JMM)