没有合适的资源?快使用搜索试试~ 我知道了~
Java并发编程.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 191 浏览量
2022-06-20
21:40:37
上传
评论
收藏 411KB DOCX 举报
温馨提示
试读
11页
概述 三种性质 o可见性 :一个线程对共享变量的修改,另一个线程能立刻看到。 缓存 可导致可见性问题。 o原子性 :一个或多个CPU执行操作不被中断。 线程切换 可导致原子性问题。 o有序性 :编译器优化可能导致指令顺序发生改变。 编译器优化 可能导致有序性问题。 三个问题 o安全性问题 :线程安全 o活跃性问题 :死锁、活锁、饥饿 o性能问题 : 使用无锁结构 :TLS,Copy-On-Write,乐观锁;Java的原子类,Disruptor无锁队列 减少锁的持有时间 :让锁 细粒 度。如ConcurrentHashmap;再如读写锁,读无锁写有锁
资源推荐
资源详情
资源评论
Java 并发编程
1. 概述
三种性质
o 可见性:一个线程对共享变量的修改,另一个线程能立刻看到。缓存可
导致可见性问题。
o 原子性:一个或多个 CPU 执行操作不被中断。线程切换可导致原子性问
题。
o 有序性:编译器优化可能导致指令顺序发生改变。编译器优化可能导致
有序性问题。
三个问题
o 安全性问题:线程安全
o 活跃性问题:死锁、活锁、饥饿
o 性能问题:
使用无锁结构:TLS,Copy-On-Write,乐观锁;Java 的原子类,
Disruptor 无锁队列
减少锁的持有时间:让锁细粒度。如 ConcurrentHashmap;再如
读写锁,读无锁写有锁
2. Java 内存模型
volatile
o C 语言中的原意:禁用 CPU 缓存,从内存中读出和写入。
o Java 语言的引申义:
Java 会将变量立刻写入内存,其他线程读取时直接从内存读(普
通变量改变后,什么时候写入内存是不一定的)
禁止指令重排序
o 解决问题:
保证可见性
保证有序性
不能保证原子性
Happens-Before 规则(H-B)
o 程序顺序性规则:前面执行的语句对后面语句可见
o volatile 变量规则:volatile 变量的写操作对后续的读操作可见
o 传递性规则:A H-B B,B H-B C,那么 A H-B C
o 管程中锁的规则 :对一个锁的解锁 H-B 于 后续对这个锁的加锁
3. 互斥锁 sychronized
锁对象:非静态 this,静态 Class,括号 Object 参数
预防死锁:
o 互斥:不能破坏
o 占有且等待:同时申请所有资源
o 不可抢占:sychronized 解决不了,Lock 可以解决
o 循环等待:给资源设置 id 字段,每次都是按顺序申请锁
等待通知机制:
o wait、notify、notifyAll
class Allocator {
private List<Object> als;
// 一次性申请所有资源
synchronized void apply(
Object from, Object to){
// 经典写法
while(als.contains(from) ||
als.contains(to)){
try{
wait();
}catch(Exception e){
}
}
als.add(from);
als.add(to);
}
// 归还资源
synchronized void free(
Object from, Object to){
als.remove(from);
als.remove(to);
notifyAll();
}
}
4. 线程的生命周期
通用线程的生命周期:
Java 线程的生命周期:
剩余10页未读,继续阅读
资源评论
小兔子平安
- 粉丝: 209
- 资源: 1940
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功