JavaGuide之各种锁 发表于 2018-01-05 | 分类于 技术 字数统计: 1.3k | 阅读时长 ≈ 4 背景多线程的本质其实就是各种线程对静态资源的合理使用问题,怎么能最大限度发挥CPU性能执行任务。锁这种概念就是解决多个线程抢占资源问题的办法,当A线程使用资源时起时不希望B线程也去使用,因为如果同时操作静态资源会导致读写不一致等问题。 各种锁的分类以下的分类都是站在不同角度对锁这种概念的分类,相互之间并没有必然的关系。 阅读全文 »
JavaGuide之volatile 发表于 2018-01-04 | 分类于 技术 字数统计: 1.9k | 阅读时长 ≈ 6 背景Java中并发程序正确地执行,必须要保证原子性、可见性以及有序性,只要有一个没有被保证,就有可能会导致程序运行不正确。 原子性:一个操作或者多个操作要么全部执行完成且执行过程中不被中断,要么就不执行。 可见性:当多个线程同时访问同一个变量时,一个线程修改了这个变量的值,其它线程能够立即看到修改的值。 有序性:程序执行的顺序按照代码的先后顺序执行。 volatile其实就是解决上面“可见性”的关键字,它可以看作是轻量级的Synchronized,它保证了共享变量的可见性。为什么会存在可见性这种问题呢?下面看下Java的内存模型。 阅读全文 »