我正在研究 AutomaticInteger。它声明使用 AtomicInteger 使整数运算成为非阻塞的。据说 AtomicInteger 的 compareAndSet() 方法利用了 Compare-and-set 特性。如果不成功,比较并设置功能将返回 false。为了使比较和设置成功,AtomicInteger 的 compareAndSet() 方法必须在无限循环中使用它。据说由于整数运算很小,所以在循环中等待比切换上下文更有好处。
据我了解,每个线程都有可用的固定时间量。如果一个线程不能在它的时间量内完成它的工作,它就必须被抢占。然后它会在以后再次获得机会。
所以我的问题是:
- 在无法获得 Synchronized 方法或块的锁定后,是否有任何线程在其时间量到期之前被抢占?如果是,该线程何时再次获得 CPU 时间?
- AtomicInteger 类的 compareAndSet() 方法中存在的一种自旋锁(无限循环)如何能够减少上下文切换时间?