需求:简单的卖票程序,要实现多个窗口同时买票。 
一、方式一: 
多线程经典问题之多窗口卖票
1、问题:为什么50张票被卖出了150次? 
多线程经典问题之多窗口卖票

2、出现的原因: 因为num是非静态的,非静态的成员变量数据是在每个对象中都会维护一份数据的,三个线程对象就会有三份。

3、解决方案:把num票数共享出来给三个线程对象使用。使用static修饰。

二、方式二: 
多线程经典问题之多窗口卖票
注意:静态成员变量必须要定义在成员方法外,而不能定义在成员方法里。 
1、问题: 出现了线程安全问题 。

出现线程安全问题的根本原因: 
1)存在两个或者两个以上 的线程对象,而且线程之间共享着一个资源。 
2)有多个语句操作了共享资源。(如果只有单个语句操作共享资源,则不会出现线程安全问题)

2、线程安全问题的解决方案:sun提供了线程同步机制让我们解决这类问题的。

线程同步机制详解见下一篇。

转载于:https://my.oschina.net/u/204616/blog/1586459

相关文章: