|企服解答
线程安全的方式有哪些:1.互斥同步;2.非阻塞同步;3.无同步方案;等等。
线程安全的方式有哪些
1.互斥同步
使用互斥锁的方式。
优点:在共享资源抢占频繁的情况下,能很好的保护共享资源的同步使用,防止数据错误。
缺点:性能较差,因线程需要阻塞等待;线程阻塞唤醒需要用户态与核心态切换,会消耗cpu性能。
2.非阻塞同步
顾名思义,就是通过不阻塞线程的方式进行共享资源的同步操作,具体方法有就是使用CAS思想进行并发策略,具体详情如下:
具体操作方案:
CAS设计中包含三个操作数:
读写的内存位置(V)
进行比较的预期原值(A)
拟写入的新值(B)
如果内存位置V的值与预期原值A相匹配,那么处理器会自动将该位置值更新为新值B,否则处理器不做任何操作。
当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程没有阻塞,而是进行“自旋”等待。
3.无同步方案
一个方法如果不涉及共享数据,那它自然就无须任何同步措施去保证多线程的安全性。
(1)可重入代码
多个线程访问同一个方法的局部变量时,是不会出现线程安全问题,因为局部变量存储在虚拟机栈中,属于线程私有的。
(2)线程本地存储
把共享数据的可见范围限制在同一个线程之内,无须同步来能保证线程之间不出现数据争用的问题。ThreadLocal并不是一个Thread,而是Thread的内部变量,用于存放本线程使用的数据,仅本线程可见。
[免责声明]
文章标题: 线程安全的方式有哪些
文章内容为网站编辑整理发布,仅供学习与参考,不代表本网站赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时沟通。发送邮件至36dianping@36kr.com,我们会在3个工作日内处理。