● 发生线程安全最底层的原因是对共享资源的访问不是原子性的,是由多个指令组成的。发生线程上下文切换时导致对共享资源的操作发生线程安全问题。导致的结果就是共享资源被访问完后,可能与预期结果不符。代码要防止这种现象发生。

        ● 在主线程中调用子线程的thread.join方法,表示,主线程必须等待子线程执行结束后,才可继续执行join方法之后的代码。join的底层实现原理就是对同步模式中的保护性暂停模式的一种应用。

        ● 保护性暂停模式就是,线程的执行条件不满足时,要进行wait等待。

        ● synchronized锁住的对象必须是拥有多个线程共享资源的对象。

使用这个图帮助理解

学习并发编程过程中的小思考_git

        ● klass word  是个指针,指向对象从属的class

学习并发编程过程中的小思考_子线程_02

        ● monitor是操作系统提供的对象 

        ● 字节码指令中  e表示exception

以调用方角度来讲,如果
        ● 需要等待结果返回,才能继续运行就是同步
        ● 不需要等待结果返回,就能继续运行就是异步