synchronized

synchronized的作用:能够保证同一时刻最多只有一个线程执行该段代码,并达到保证并发安全的作用。
synchronized的用法:
第一种方法,对象锁(普通方法锁,代码块锁)
普通方法锁的特点
代码块锁(this)的特点
代码块锁(object)的特点
第二种方法,类锁(静态方法或锁的对象是class对象)
静态方法锁的特点:使得锁只有一个,多个调用方互斥。
代码块(class对象)锁的特点:由于class对象只有一个,所以类锁只有一个,多个线程访问的是同一把锁。

多线程访问synchronized的六种情况
两个线程访问一个对象的同步方法:串行执行
两个线程访问两个对象的同步方法:并行执行
两个线程访问静态的同步方法:串行执行
两个线程访问同一个对象的不同的普通同步方法:串行,因为是同一个对象,同一个实例,拿到的是同一把锁
两个线程,一个访问静态同步锁,另一个访问非静态同步锁:并行执行,拿到的是不同的锁
方法抛异常后,会释放锁

要领:
1一把锁只能被一个线程获取,其他线程只能等待
2每个实例都对应有自己的一把锁,不同实例之间互不影响。当锁对象是class是或者static synchronized 时,所有对象都是用的一把锁。
3方法正常执行完毕或者抛出异常,锁都会释放

synchronized 关键字的性质:
可重入:指的是同一线程的外层函数获得锁后,内层函数可以直接再次获得改锁,可重入锁是递归锁。
(不可重入:指的是线程获取了线程锁,我想再次使用,只能先释放再竞争)
可重入锁的优点:避免死锁,提升封装性。
可重入的粒度:线程级别的粒度,在一个线程中,只要拿到了锁,可以访问其他方法或者其他对象,只要这把锁有效
不可中断:一旦锁被别人获得,如果我想获得锁,只能等待或者阻塞,直到别人释放锁。自己没有中断别人锁的权力,也没有推出等待的能力。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值