JavaEE企业级分布式高级架构师010

  1. 概述

三种性质
可见性:一个线程对共享变量的修改,另一个线程能立刻看到。缓存可导致可见性问题。
原子性:一个或多个CPU执行操作不被中断。线程切换可导致原子性问题。
有序性:编译器优化可能导致指令顺序发生改变。编译器优化可能导致有序性问题。
三个问题
安全性问题:线程安全
活跃性问题:死锁、活锁、饥饿
性能问题:
使用无锁结构:TLS,Copy-On-Write,乐观锁;Java的原子类,Disruptor无锁队列
减少锁的持有时间:让锁细粒度。如ConcurrentHashmap;再如读写锁,读无锁写有锁
2. Java内存模型

volatile
C语言中的原意:禁用CPU缓存,从内存中读出和写入。
Java语言的引申义:
Java会将变量立刻写入内存,其他线程读取时直接从内存读(普通变量改变后,什么时候写入内存是不一定的)
禁止指令重排序
解决问题:
保证可见性
保证有序性
不能保证原子性
Happens-Before规则(H-B)
程序顺序性规则:前面执行的语句对后面语句可见
volatile变量规则:volatile变量的写操作对后续的读操作可见
传递性规则:A H-B B,B H-B C,那么A H-B C
管程中锁的规则:对一个锁的解锁 H-B于 后续对这个锁的加锁
3. 互斥锁sychronized

锁对象:非静态this,静态Class,括号Object参数
预防死锁:
互斥:不能破坏
占有且等待:同时申请所有资源
不可抢占:sychronized解决不了,Lock可以解决
循环等待:给资源设置id字段,每次都是按顺序申请锁
等待通知机制:
wait、notify、notifyAll

想具体学习,查看资料
链接: https://pan.baidu.com/s/1I6LFG13BU2QN3X3_IQpGtg?pwd=dgr5 提取码: dgr5
–来自百度网盘超级会员v3的分享

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值