竞态条件和临界区

竞态和临界区

当多个线程写入相同资源的时候,可能会发生问题。但是,如果数据没有变化的话,多个线程读取相同资源倒是没有问题。
下面有个例子,如果多个线程同时处理的话就会发生问题

public class Counter {
	
	protected long count = 0;
	
	public void add(long value) {
		this.count = this.count + value;
	}
}

有可能出现两个线程通知执行了 Counter.add() 方法,这时候就会出现问题。这就是竞态。这个 add() 方法就是临界区。

如何防止竞态

有几个方法

  • 同步代码块(synchronization block)
  • locks
  • java.util.concurrent.atomic.AtomicInteger
posted @ 2016-09-21 22:50  勇敢的少年啊  阅读(161)  评论(0编辑  收藏  举报