Synchronized总结

本文详细介绍了Java中的Synchronized关键字,包括其在保证线程安全、使用方法、锁类型(轻量级/重量级、乐观/悲观、公平/非公平、可重入)、以及锁的内部实现策略,重点讲解了偏向锁和锁升级过程。
摘要由CSDN通过智能技术生成

Synchronized的特性

Synchronized是JAVA中实现线程安全的一个关键字,他可以应用于方法或者代码块中.当一个线程访问一个synchronized方法或者代码块时,它会自动获取方法会或者代码块的锁,并且再其他线程获取的这个锁之前将其阻塞.synchornized的作用是保证在多个线程在并发执行的时候,对共享资源的访问是有序的,避免了数据不一致或者冲突的情况,当一个线程执行synchronized代码时,其他线程必须等待该线程执行完毕,并且释放了锁才行.

Synchronized的使用方法

  1. 修饰静态方法,作用于类的class对象,进入修饰的静态方法前选需要获取类的class对象的锁.
  2. 修饰实例方法,作用于当前对象,进入代码前需要获得对象的锁.
  3. 修饰代码块,需要指定对象,在进入同步代码块前需要先获取指定对象的锁.

Synchronized的锁机制

  • synchronized即是轻量级锁也是重量级锁.重量级是基于系统的互斥锁实现的;轻量级锁是基于自旋锁实现的.
  • synchronized即是乐观锁也是悲观锁.
  • synchronized是非公平锁
  • synchronized是可重入锁
  • synchronized不是读写锁

Synchronized锁的内部实现策略

当代码中写了一个synchronized之后,会产生一系列自适应过程(锁升级)

无锁  -- > 偏向锁 -->轻量级锁 -->重量级锁

偏向锁:对这个需要加锁的对象进行标记,当没有其他线程来竞争锁时就不上锁,一旦有其他线程来竞争锁时就立刻上锁.

当有更多的线程来竞争锁时,就升级为轻量锁,更加激烈后在升级为重量级锁.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值