并发编程三大特点:
可见性、原子性、有序性、
代码:
可以发现心脏包无限运行!
Jvm简单的图形:
栈和堆的特性?堆是存放对象(共享)、栈是属于每一个线程、堆比栈运行速度慢、原因堆可以动态分配内存、
加了Volatile:
Volatile为什么?原理?
线程严格意义来说属于cpu的、
cpu一开始是单核,单核架构:
多核cpu架构:
因写者画图不耐烦敷衍一下(凑合着看)、
他们的缓存发生了变化(L3 Cache是共享的)离cpu越近越快、越远越慢、
缓存基于什么实现的呢?缓存有很多优化的点Cache miss、为共享(高并发程序设计有提到,读者有兴趣可以看看)等等问题、
他们有两种、总线锁和缓存一致性(有兴趣的读者可以自己百度)、
硬件和内存模型的关系:
对照写者上面的代码分析这张图;
工作内存表示在cache高速缓存中,不同的线程中cache的变量是不一样的,上图中他们两个工作内存是互相隔离的导致访问不了,回写主内存才可见、
看一下代码没有volatile:
为什么去掉了volatile读取到了true???
它的底层用了什么???
写者来回答,底层调用了锁(读者要是不信可以生成字节码()、汇编经行分析)、怎么生成汇编需要用Jvm参数、
Stop类生成汇编:
对照汇编指令来看:
shutDown方法:
用了锁(lock)!!