多线程安全

在多线程的调度下,导致出现了一些随机性,随机性使代码中出现的另一些bug 这就是线程不安全

造成线程不安全的原因

        1.抢占式执行,调度过程随机.(最基本的原因)

        2.多个线程随时修改同一个变量.

        3.针对变量的操作,不是原子的.  例如count++这种,本质上是三个指令,load,add,save.

        4.内存可见性问题, 一个线程读,一个线程写

加锁的方式有三个

1.对普通方法进行加锁

class A {
    int i;

    synchronized public void add() {//表示将这个方法加锁,这一个方法是一个原子性的操作.   如果对一个普通方法加锁就相当于把锁对象指定为this了
        i++;
    }
}

2.对一段代码块进行加锁

class B {
    int i;

    public void add() {
        synchronized (this) {  //如果要对一个代码块加锁,就需要手动指定,锁对象是啥.(针对哪儿个对象加锁)
            i++;
        }
    }
}

3.对一个静态方法进行加锁

class C {
    int i;

    public void add() {
        synchronized (C.class) {  //这个表示针对当前对象进行加锁,加锁的本质是 将当前类的隐藏属性 改为加锁状态
            i++;
        }
    }
}

可重入锁

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值