临界区 表示一种公共资源或共享数据,可以被多个线程使用。但是每一次只能有一个线程使用它。一旦临界区资源被占用,想使用该资源的其他线程必须等待。
class TickerCenter{
// 描述剩余的票的数量
public static int restCount = 100;
}
上述程序的运行结果
运行结果分析:
线程1抢到了资源,并且已经做好了减法,但还没来得及输出,就被其他线程抢走了,等到线程1再次抢到资源时,才能完整输出上次的值.
临界资源问题解决方案:
线程访问临界资源时,加一把锁,其他线程再来访问这个资源的时候,看到锁,就不会再访问这个资源了,等到线程访问完成后,释放锁,其他资源才可以接着访问这个资源.
1) 同步代码段