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