需求:简单的卖票程序,要实现多个窗口同时买票。
一、方式一:
1、问题:为什么50张票被卖出了150次?
2、出现的原因: 因为num是非静态的,非静态的成员变量数据是在每个对象中都会维护一份数据的,三个线程对象就会有三份。
3、解决方案:把num票数共享出来给三个线程对象使用。使用static修饰。
二、方式二:
注意:静态成员变量必须要定义在成员方法外,而不能定义在成员方法里。
1、问题: 出现了线程安全问题 。
出现线程安全问题的根本原因:
1)存在两个或者两个以上 的线程对象,而且线程之间共享着一个资源。
2)有多个语句操作了共享资源。(如果只有单个语句操作共享资源,则不会出现线程安全问题)
2、线程安全问题的解决方案:sun提供了线程同步机制让我们解决这类问题的。
线程同步机制详解见下一篇。