多线程 第三节 Synchronized与Volatile

本文详细介绍了Java中的Synchronized关键字,包括其作用、使用方式、锁重入和优化建议。同时,探讨了Volatile关键字,强调其在多线程中保证可见性和禁止指令重排序的重要作用。并对比了Synchronized与Volatile在并发控制中的区别。
摘要由CSDN通过智能技术生成

Synchronized解释

1、Java 中的每个对象都有一个锁或者叫做监视器(monitor) ,当访问某个对象的 synchronized  方法时, 表示将该对象上锁 ,此时其他任何线程都无法再去访问该 synchronized  方法了, 直到之前的那个线程执行方法完毕后 ( 或者是抛出了异常)  ,将该对象的锁释放掉,其它线程才有可能再去访问该 synchronized  方法。
2、Synchronized:是同步关键字,对需要锁定的资源加上该关键字,即为同步监视器。Synchronized 准确的解释,线程间的互斥。
3、当 synchronized 关键字修饰一个方法的时候,该方法叫做同步方法、互斥区或临界区。
4、当某个对象用synchronized修饰时,表示该对象在任意时刻只能有一个线程访问
5、如果某个 synchronized 方法是 static 的,那么当线程访问该方法时,它锁的并不是synchronized 方法所在的对象, 而是 synchronized  方法所在的对象所对应的 Class  对象,因为 Java  中无论一个类有多少个对象,这些对象会对应唯一一个 Class 对象,因此当线程分别访问同一个类的两个对象的两个 static、synchronized 方法时,他们的执行顺序也是顺序的,一个线程先去执行方法,执行完毕后另一个线程才开始执行。
6、synchronized保证共享数据操作的完整性
7、锁释放
        1)出现异常时,锁自动释放
        2)当在synchronized块中遇到break,return或抛出exception。则自动释放对象锁。
8、对象锁的同步和异步
      同步Synchronized
          同步的概念就是共享,如果不是共享的资源,就没有必要进行同步,也就是没有必要进行加锁。
          同步的目的就是为了线程的安全,需要满足两个最基本的特性:原子性和可见性。
      异步Synchronized
          异步的概念就是独立,相互之间不受到任何制约,两者之间没有任何关系,这里的异步可以理解为多个线程之间不会竞争共享资源。

Synchronized的两种使用方式

1、方法前
2、代码块前(有两种形式)
        1)synchronized(this){ }或synchronized{ }代码块中的代码将获得当前对象引用的锁
      

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值