线程安全出现的原因和解决方案

线程安全问题出现的条件:
    1. 必须要存在两个或者两个以上的线程共享同一个资源(代码块)。
    2. 被共享的资源代码块语句必须有两句或者两句以上。

线程安全出现的原因:

    1.操作系统方面:对线程的调度,是抢占式执行的随机过程。

    2.代码结构:多线程同时修改同一个变量。

    3 .CPU的修改操作不是原子性的。

   4.内存的可见性。程序运行时,出现一个线程修改内存,一个线程读取内存过程中,由于JVM自动优化出现误判引起的。

   5.指令重排序。

解决方案:

     通过加锁的方式来解决,用synchronized(){}方式。

      即通过关键字synchronized,将锁对象锁定在(),使执行的代码块{}打包成一个整体代码执行。被锁定对象进入代码块开始到代码块执行完成,整个过程像一条指令执行,不会被打断,直到代码块执行完毕(return/抛出异常),被锁定对象才被解锁。

      如果一个线程对某对象加了锁,而另外一个线程也企图对该对象加锁,就会出现“阻塞”(锁竞争/锁冲突)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值