Java多线程速记

内存:所有的变量都存储在主内存,但每条线程有工作内存,线程间传递内存需要主内存帮忙

线程实现:1.使用内核线程实现-使用内核线程的高级接口—轻量级进程(即线程),创建、析构、同步都需要进行系统调用。2.使用用户线程实现-阻塞,多处理器等问题无法处理3.用户线程+轻量级进程混合实现。Win和linux 一对一的线程模型实现的,一条Java线程就映射到一条轻量级进程之中

Thread.yield()可以暂停线程(抢占式调度和协同式线程调度)

状态:新建、开始、期限等待、阻塞、结束

线程安全的实现方法:1.互斥同步(悲观monitorentermonitorexit。2.非阻塞同步(乐观)如AtomicInteger。(有ABA问题)3.无同步方案:无共享内存  Collections.synchronizedMap,ConcurrentHashMap

线程安全:不可变,绝对/相对线程安全,线程兼容,线程对立。

Volatile:最轻量级的同步机制,保证变量对所有线程可见(新值立刻同步,每次使用从主存刷新),保证了变量自身的原子性,禁止了指令重排序优化(单线程重排序仍有序,多线程爆炸)。

Synchronized:重量级操作,因为阻塞,唤醒需要从用户态到核心态

ReentrantLock:等待中断、公平锁、锁定可以帮定多个。1.6性能平

锁优化:1.自旋锁(等10再进入内核态)2.锁消除(编译时完成,逃逸分析,StringBuffer+)3.锁粗化(同对象只上一次)4.轻量级锁(无锁先加“锁记录”空间,copy 头到空间,指针指向,成功就好00,不成且不是自己的锁就膨胀成自旋锁)5偏向锁: 标识是否设置成1,测试线程ID是否能指向当前线程,可以膨胀成轻量级锁。          对象头:1.Mark Word(存储对象哈希码、GC标识、年龄、同步锁等)2.Klass Point(指向存储类型元数据的指针)3.用于字节对齐补白的填充数据(8字节不补)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值