-
内置锁的特性
无论哪个线程持有守护变量的锁, 它都可以用独占的方式来访问这些变量, 并且对变量的任何修改对随后获得这个锁的线程都可见
-
多个线程同时请求锁时会发生的现象
(1) 一个线程获得锁, 其他线程被挂起并且在稍后恢复运行
(2) 当线程恢复运行时, 必须等待其他线程执行完它们的时间片, 才会被调度
结论: 在挂起和恢复线程时存在巨大的开销
-
volatile的机制
(1) 使用volatile时不会发生上下文切换、线程调度等操作, 因此更__轻量__
(2) 但是问题是volatile只提供可见性, 不能保证原子操作(例如简单的i++)
i++编译出的指令有4条
getstatic; 从内存中获取i的值---> 这步获取的值一定是对的 iconst_1; idd; 执行这两步的时候其他线程可以把i在内存中的值改掉,于是栈顶的值是一个过期值 putstatic; 此时再同步回主内存的值是一个偏小的值,因为其他线程++修改的结果没有用上
chapter15_原子变量与非阻塞同步机制_1_锁的劣势
最新推荐文章于 2021-04-04 14:47:51 发布