Synchronized (内置锁)

      使用的原因:在高并发的业务流程中执行代码块经常会发生,经常造成数据的脏读,通过脏读而写入的数据造成的生产过程数据错误,从而引发致命问题。

       解决方案:Java提供了一种内置的锁机制来支持原子性:同步代码块(Synchroized Block),他包含两个组成部分(锁的引用,以及被锁保护的代码块),以 Synchronized 关键字修饰的方法就是一种横跨整个方法体的同步代码块,同步块的锁就是方法调用所在的对象。

 

 

       每个 Java 对象都可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁,线程在进入同步块之前会自动获得锁,并且在退出同步代码块时自动释放锁,

       而无论是通过正常的控制路径退出,还是通过从代码块中抛出异常退出,获得锁的唯一途径就是由这个锁保护的同步代码块或方法。

      Java 的内置锁相当于一种互斥体(互斥锁) 这意味着最多只有一个线程能持有这种锁,当线程A尝试获取一个由线程B持有的锁时,线程A必须等待或者阻塞, 直到线程B释放这个锁,如果B永远不释放锁,那么线程A将永远等下去。

      由于每次只能有一个线程执行内置锁保护的代码块,因此这个锁保护的同步代码块会以原子的方式执行,多个线程在执行该代码块时也不会互相干扰,并发环境中的原子性与事物应用程序中的原子性有着相同的含义(一组语句作为一个不可分割的单元被执行)。任何一个执行同步块的线程都不可能看到其他线程正在执行由同一个锁保护的同步代码块(排他性

     总结使用了 Synchronized  使得同一个时刻只能够有一个线程能够执行同步块内的方法,从而保证了线程的阿全,但是这种方法过于极端,因为当出现大量线程访问的时候,需要不停的等待锁的释放,造成响应时间的延长,所以他的响应性非常低,这是性能问题而不是线程安全问题。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值