多线程之线程安全问题

今天就来讲讲多线程之线程安全问题,什么是线程安全问题,当多个线程同时共享一个全局变量做写的操作的时候,可能会受到其他线程的干扰,就会产生线程安全问题,导致数据出现脏读。

产生的原因:同时做写的操作。同时做写的操作。同时做写的操作,重要的事说三遍,

如何解决了,核心思想:在同一个时刻,只有一个线程执行,那么这个时候整个程序就变成单线程执行的了,俗话说的好,事情都有两面性,虽然保证了线程的安全性,但是执行效率却大大降低了,你想想,一群马过独木桥快,还是一匹马过桥快,显而是一群马,但是一点都不安全,随时都有可能掉到河里,被大水冲走,一匹马过桥,虽然整体影响大部队的效率,但是稳啊,咱们做人做事不就是求一个稳吗。

java中如何解决线程安全问题

Lock锁。sysnchronized, cas无锁等等

Synchronized加锁之后如何保证线程安全问题的。

首先要有一把锁,在多个线程中,同时执行同一个方法的时候,首先要获取到锁,只有获取到锁的情况下,才可以进入到该方法执行,就像上厕所,只有抢到锁上的钥匙才能进去方便。

那么Synchronized在什么情况下释放:run方法        码执行完毕或者程序跑出异常的情况下自动释放锁。

Synchronized使用方式:代码块形式:

 @Override
    public void run() {
          
           synchronized (this){
              //线程要执行的代码
           }
    }

注意:使用到Synchroized锁的时候可以使用任意对象锁作为锁。如果在方法上加上Synchroized关键字默认使用this锁。

 @Override
    public static void run() {
           synchronized (Test.class){
              //线程要执行的代码
           }
    }

如果方法是一个静态方法,就使用当前类的Class字节码作为锁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值