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

1 说明

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

2 异常

exception.png

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

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

3 并发

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

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

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;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,906评论 18 399
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 10,148评论 1 114
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 11,936评论 0 62
  • 家乡的村子并不大,三四十户人家,村上的年轻人为了生机基本上都离开了家乡。只留下了老人和小孩在这片土地上坚守着。偌大...
    叶小诺阅读 3,064评论 0 0
  • 连日来,艳阳高照,烈日炎炎,毒热的太阳炙烤着大地。虽然高温酷暑,但住建执法队员依旧和往常一样,冒着烈日,坚守岗位。...
    为123阅读 2,472评论 0 0