同步主要从java内容模型中提到的比较多点
*
synchronizad
*
volatile
每个线程都有自己的工作内存, 而线程是不能直接操作主内存。主内存的变量属于共享变量, 线程需要使用主线程的变量时, 需要先拷贝一份到自己的工作线程中, 自己操作完了再拷贝到主线程中进行同步。
如果多个线程都使用了主线程中的一个共享变量的话, 都复制了主线程变量到自己的工作线程, 每个工作线程是不可见的。 所以你并不知道其他工作线程对其做了什么修改。 造成了工作线程对同一个变量有不同的值的问题。
synchronizad: 是给运行的方法等加上了一把锁(一个标签), 当一个工作线程在运行时发现这些代码锁上了, 就会被挂起, 等待其他工作线程使用完毕后再运行。
volatile: 是一旦变量改变了就会通知去修改主内存