java—使用atomicinteger的线程如何减少上下文切换的次数?

voase2hg  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(461)

我在学自动积分。它指出,使用atomicinteger可以使整数操作无阻塞。据说atomicinteger的compareandset()方法利用了比较和设置特性。如果比较和设置功能不成功,则返回false。为了使compare和set成功,atomicinteger的compareandset()方法必须在无限循环中使用它。据说,由于整数运算很小,所以在循环中等待比切换上下文更有益。
据我所知,每个线程都有一个固定的时间量子。如果线程不能在其时间量内完成其工作,则必须抢占它。那它以后还会有机会。
所以我的问题是:
在无法获得同步方法或块的锁之后,是否有线程在其时间量过期之前被抢占?如果是,那么线程什么时候再次获得cpu时间?
atomicinteger类的compareandset()方法中存在一种自旋锁(无限循环)如何减少上下文切换时间?

p1iqtdky

p1iqtdky1#

在无法获得同步方法或块的锁之后,是否有线程在其时间量过期之前被抢占?如果是,那么线程什么时候再次获得cpu时间?
这取决于日程安排。但是如果线程被抢占,那只是因为还有其他线程可以立即向前推进。
atomicinteger类的compareandset()方法中存在一种自旋锁(无限循环)如何减少上下文切换时间?
只有当 AtomicInteger 已修改,在这种情况下,这意味着另一个线程取得了前进的进展。无论如何,两个线程不能通过同时修改同一个共享资源来前进。如果它循环很多,那就意味着其他线程正在进行很多向前的进程。在现实条件下,线程旋转超过两次的情况非常罕见,而且这仍然比不必要的上下文切换便宜。

相关问题