14-synchronized保证线程安全的原理(理论层面)

本文详细讲解了synchronized如何保证线程安全。通过分析内置锁和互斥锁的概念,指出synchronized修饰实例方法时,锁对象为当前实例;修饰静态方法时,锁对象为Class字节码对象。同时,synchronized也可用于代码块,指定任意对象作为锁。通过对锁的互斥性理解,确保了被保护代码的原子性,从而保障了线程安全性。
摘要由CSDN通过智能技术生成

我们本讲开始来正式解决我们之前所遇到的线程安全性问题,回顾之前的内容,我们实现了一个数值序列生成器,那么,这个数值序列生成器呢,在我们多线程的环境下,会发现,生成的数值序列不是我们所预期的那种递增的序列,而是会出现那种我们所不预期的错误,不符合我们预期的错误,但是,我们当时的解决方案比较简单,就在那个方法上加了一个synchronized,于是,这个问题就解决了,我们并没有去详细的解释为什么在方法上加了一个synchronized就能够解决,那么,从本节课开始,我们来正式的了解解决线程安全性问题的各种的方案,首先,第一个就是synchronized,我们后面还会学习其他的锁呀、包括我们的元子类等等。那么,首先我们来看synchronized它为什么就能够解决我们的线程安全性问题呢?在看synchronized之前,我们首先来看内置锁,什么是内置锁呢?就是说,Java中每一个对象都可以用作同步的锁,那么,这些锁就被称之为内置锁,什么意思呢?我们来看代码,

这是我们的序列生成器,我在这里加了一个synchronized,这个线程安全性问题就解决了,那么,每一个Java中的对象都是一个内置锁,那么,这个线程在进入同步代码块之前,都必须先获得锁,也就是获得内置锁,然后,获得锁之后,它就可以进入到同步代码块中执行了,那么,这个线程获得到锁之后,其他的线程就没法再获得了,只有等这个线程把同步代码块中的代码执行完毕,或者这个线程抛出异常等等,总之就是这个线程释放了锁之后,其他的线程才能够再进来,那么,也就保证了被synchronized修饰的这个方法的方法体中(同步代码块中)相当于一个原子型操作,这样也就保证了线程的安全性,那么,这里提到了几个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值