第一部分:并发理论基础08->并发编程万能钥匙
1.管程
管程就是解决并发问题的万能钥匙
管理共享变量以及对共享变量的操作过程,让他们支持并发
2.MESA模型
互斥:统一个时刻只允许一个线程访问共享资源
同步:线程之间如何通信,协作
解决互斥问题:将共享变量及对共享变量的操作统一封装起来。
将线程不安全的队列封装起来,对外提供线程安全的操作方法,
每个条件变量都有一个对应的等待队列
public class BlockedQueue<T>{
final Lock lock =
new ReentrantLock();
// 条件变量:队列不满
final Condition notFull =
lock.newCondition();
// 条件变量:队列不空
final Condition notEmpty =
lock.newCondition();
// 入队
void enq(T x) {
lock.lock();
try {
while (队列已满){
// 等待队列不满
notFull.await();
}
// 省略入队操作...
//入队后,通知可出队
notEmpty.signal();
}finally {
lock.unlock();
}
}
// 出队
void deq(){
lock.lock();
try {
while (队列已空){
// 等待队列不空
notEmpty.await();
}
// 省略出队操作...
//出队后,通知可入队
notFull.signal();
}finally {
lock.unlock();
}
}
}
原创:做时间的朋友