java线程安全

线程安全的含义:当多个线程访问一个对象的时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。

java语言中线程安全的五个维度(安全性从高到低):

1、不可变

2、绝对线程安全

3、相对线程安全

4、线程兼容

5、线程对立

一、线程安全的实现方法

1.互斥同步(悲观锁):

定义:

互斥:实现同步的一种手段,实现方式有:临界区、互斥量、信号量

同步:在多个线程并发访问共享数据时,保证共享数据在同一个时刻只被一个线程使用。

实现方式:

1.synchronized:实现原理:在同步块前后分别形成monitorenter和monitorexit,

当执行monitorenter时,先尝试获取对象锁,如果对象没被锁定,或已经有了这个对象的锁,把锁的计数器加1,

当执行monitorexit时,锁计数器减1,当计数器为0时,锁释放。

2.ReentrantLock(重入锁):

  与sychronized类似,但多具有以下几个功能:

   1.等待可中断:当持有锁的线程长期不释放锁的时候,正在等待的线程可以放弃等待

   2.可实现公平锁:通过带布尔值的构造函数使用公平锁(按申请时间获取的锁)

   3.可以绑定多个条件的锁:调用newcondition()绑定多个条件

2.非阻塞同步(乐观锁):

定义:先行进行操作,没有争用共享数据,操作成功;反之,就产生了冲突,采取补偿措施(不断重试)。

3.无同步方案:

   1.可重入代码(纯代码):在代码执行的任何时刻中断它,在控制权返回后,源程序不会出现任何错误

   2.线程本地存储:所需要的数据必须与其他代码共享,把共享数据的可见范围限制在同一个线程之内。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 - 线程安全的定义 当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行...
    彬彬酱阅读 7,380评论 0 12
  • 引用自多线程编程指南应用程序里面多个线程的存在引发了多个执行线程安全访问资源的潜在问题。两个线程同时修改同一资源有...
    Mitchell阅读 6,104评论 1 7
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 9,154评论 0 11
  • 浅谈java内存模型 不同的平台,内存模型是不一样的,但是jvm的内存模型规范是统一的。其实java的多线程并发问...
    流浪java阅读 2,915评论 1 3
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-java.h...
    eddy_wiki阅读 6,639评论 0 14

友情链接更多精彩内容