线程的分类

  1. 线程的概念、启动方式、常用方法
  2. Synchronized(Object)线程同步

  -- 不能用String常量或者String数据类型,Integer,Long。不能用基础数据类型

  -- “object”

  1. 线程同步

  -- synchronized

  1. 锁- 锁的是对象不是代码
  2. 普通方法 锁的是this(当前对象)   static对象锁的是 xx.class
  3. 锁定方法与非锁定方法 可以同时执行
  4. 锁升级 如果锁定某个对象 在对象头上的某两位指定锁的是什么类型的锁。在对象头上记录着哪个线程谁抢了这把锁

      --  偏向锁->自旋锁->重量级锁  这三种锁 锁的粒度依次递增

首先是无锁的状态,线程来了先不尝试加锁,markword 只是记录这个线程ID (偏向锁)。这样认为这个对象是这个线程独有的,再来申请锁时就先倾向于同样的这个线程。这种情况的锁偏向于第一次拿到这把锁的线程。如果线程争用,下次来的这个线程是新的线程则进行锁升级,首先尝试升级为 自旋锁,自旋10次以后,升级为重量级锁 - OS Operator

自旋是积极的排队,占用CPU时间的。Wait queue是不占用CPU时间的,不消耗CPU

什么时候用自旋锁,什么时候用重量级锁?

执行时间短(加锁代码),线程数少,用自旋锁

执行时间长,线程数多,用系统锁,就是重量级锁

Synchronized加锁 效率低,某种情况下或条件下向系统申请重量级锁

Automatic 不加锁效率高

LongAdder 内部是用分段锁 锁资源的,高并发、线程多的情况下有优势。采用CAS操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值