Java并发之Synchronized

前言:Synchronized的作用是能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果,是Java的关键字,被Java语言原生支持,是最基本的互斥同步手段,是并发编程总的元老级角色,是并发编程的必学内容。
  1. Synchronized的两个用法

    1. 对象锁:包括方法锁(默认锁对象为this当前实例对象)和同步代码块锁(自己指定锁对象)
    2. 类锁:指定Synchronized修饰静态的方法或指定锁为Class对象
  2. 多线程访问同步方法的7种情况

    1. 两个线程同时访问一个对象的同步方法:true
    2. 两个线程访问的是两个对象的同步方法: false
    3. 两个线程访问的是synchronized得静态方法: true
    4. 同时访问同步方法与非同步方法:非同步方法不受影响,所以两个方法基本上是同时开始,同时结束
    5. 访问同一个对象的不同的普通同步方法:因为同一个对象中的所有的同步的方法获取的锁都是这个对象的锁,如果按照顺序执行两个方法,最终是按照顺序执行的
    6. 同步访问静态synchronized和非静态synchronized方法:不会受影响,两者同时结束
    7. 方法抛出异常后,会释放锁
  3. 核心思想

    1. 一把锁同时只能被一个线程获取,没有拿到锁的线程必须等待(1、5)
    2. 每个实例都对应一把锁,不同的实例对应不同的锁(2、3、4、6)
    3. 无论方法是正常执行完毕还是抛出异常,锁都会释放
  4. 性质

    1. 可重入性:同一线程的外层函数获取到锁以后,内层函数可以直接再次获取锁
      1. 好处:避免死锁,提升封装性
      2. 粒度:线程而非调用
    2. 不可中断:一旦这个锁被别人获得了,如果我还想获得,我只能选择等待或者阻塞,知道别的线程释放这个锁
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值