● 发生线程安全最底层的原因是对共享资源的访问不是原子性的,是由多个指令组成的。发生线程上下文切换时导致对共享资源的操作发生线程安全问题。导致的结果就是共享资源被访问完后,可能与预期结果不符。代码要防止这种现象发生。
● 在主线程中调用子线程的thread.join方法,表示,主线程必须等待子线程执行结束后,才可继续执行join方法之后的代码。join的底层实现原理就是对同步模式中的保护性暂停模式的一种应用。
● 保护性暂停模式就是,线程的执行条件不满足时,要进行wait等待。
● synchronized锁住的对象必须是拥有多个线程共享资源的对象。
使用这个图帮助理解
● klass word 是个指针,指向对象从属的class
● monitor是操作系统提供的对象
● 字节码指令中 e表示exception
以调用方角度来讲,如果
● 需要等待结果返回,才能继续运行就是同步
● 不需要等待结果返回,就能继续运行就是异步