热门文章> 线程安全的方式有哪些 >

线程安全的方式有哪些

36氪企服点评小编
2022-12-01 15:50
604次阅读

|企服解答

  线程安全的方式有哪些: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个工作日内处理。

相关文章
最新文章
查看更多
关注 36氪企服点评 公众号
打开微信扫一扫
为您推送企服点评最新内容
消息通知
咨询入驻
商务合作