临界区
一段代码块内如果存在对共享资源的多线程读写操作,称这段代码块为临界区,其共享资源为临界资源。
竞态条件
多个线程在临界区内执行,由于代码的执行序列不同而导致结果无法预测,称之为发生了竞态条件。
为了避免临界区的竞态条件发生,有多种手段可以达到目的:
- 阻塞式的解决方案:synchronized,lock
- 非阻塞式的解决方案:原子变量
public class Demo{
// 临界资源
private static int count = 0;
// 临界区
public void incr(){
count++;
}
// 临界区
public void decr(){
count--;
}
// TODO 多线程调用 incr和 decr 方法
}