码迷,mamicode.com
首页 > 其他好文 > 详细

自旋锁(spinLock)

时间:2020-04-22 11:41:18      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:com   bsp   状态   cpu   atom   任务   读写   其他   wait   

1.AtomicReference

        AtomicReference类提供了一个可以原子读写的对象引用变量。原子意味着尝试更改AtomicReference的多个线程(例如:比较和交换操作),不会是AtomicReference最终达到不一致的效果。
        AtomicReference有一个先进的方法compareAndSet(),它可以将引用和预期值(引用)进行比较,如果它们值相等,则在AtomicReference对象内设置一个新的引用。

2.概述

????????自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其他线程获取,那么该线程将循环等待,然后不断地判断锁是否能够被成功获取,直到获取到锁才会推出循环。
????????获取锁的线程一直处于活跃状态,但是并没有执行任何有效的任务,使用这种锁会造成busy-waiting。

3.自选锁存在的问题

????????1.如果某个线程持有锁的时间过长,就会导致其他等待获取锁的线程进入循环等待,消耗CPU。使用不当会造成CPU使用率极高。
????????2.上面Java实现的自旋锁是不公平的,即无法满足等待时间最长的线程有限获取锁。不公平的锁会存在“线程饥饿”问题。

自旋锁(spinLock)

标签:com   bsp   状态   cpu   atom   任务   读写   其他   wait   

原文地址:https://blog.51cto.com/13678728/2489250

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!