多线程

线程的生命周期?

线程的创建

  • 继承thread类
  • 实现runnable
  • 匿名内部类
  • 带返回值的线程
  • 定时器timer
  • 线程池的实现
  • lambda表达式的实现
  • spring实现

任何对象都可以作为锁,那么锁信息又存在对象的的什么地方呢?

存在对象头中

对象头信息

  • mark word
    • 线程的id
    • epoch
    • 对象的分代年龄信息
    • 是否是偏向锁
    • 锁标志位
  • class metadata address
  • array length

synchronize的锁有以下特征

  • 偏向锁(适用于使用一个线程在访问同步代码块)
  • 轻量级锁()
  • 重量级锁

volatile轻量级锁

volatile称之为轻量级锁,被volatile修饰的变量,在线程之间是可见的。

可见:一个线程修改了这个变量的值,在另外一个线程中能够读到这个修改后的值。

synchronized除了线程之间互斥之外,还有一个非常大的作用,就是保证可见性。

lock指令:

    • 在多处理器系统上:
      • 在当前处理器缓存行的内容写回到系统内存。
      • 这个写回到内存的操作会使在其他cpu缓存了该地址的数据失效。
      • 硬盘--内存--CPU指令

jdk提供的原子类原理及使用(atomic)

原子更新基本类型

原子更新数组

原子更新抽象类型

原子更新字段

在rt.jar下面

Java.util.concurrent.atomic下面

Lock的使用(jdk5之后juc包中)

AbstractQueuedSynchronized(AQS)(并发的基础)

谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronized(AQS)!

  类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch...

https://www.cnblogs.com/daydaynobug/p/6752837.html

ReentrantLock(公平锁和非公平锁)

通过构造方法传入不同的参数,来判断是否是公平锁

ReentrantReadWriteLock(读写锁)

锁降级和升级

线程安全性问题简单总结

 

ThreadLocal

CountDownLatch

CyclicBarrier

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值