摘要:
原子性: 原子性就是指该操作是不可再分的。不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。简而言之,在整个操作过程中不会被线程调度器中断的操作,都可认为是原子性。比如 a = 1; 非原子性: 也就是整个过程中会出现线程调度器中断操作的现象 类似"a ++"这样的操作不具有 阅读全文
摘要:
volatile保证可见性 一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作的可见性,即一个线程修改了某个变量的值,这新值对其它线程来说是立即可见的 2)禁止进行指令重排序 volatile不能确保原子性 在访 阅读全文
摘要:
JMM关于synchronized的两条规定: 1)线程解锁前,必须把共享变量的最新值刷新到主内存中 2)线程加锁时,将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存中重新获取最新的值 (注意:加锁与解锁需要是同一把锁) 通过以上两点,可以看到synchronized能够实现可见性。同时 阅读全文