需求:簡單的賣票程序,要實現多個窗口同時買票。
1、方式一:
一、問題:爲何50張票被賣出了150次?
安全
二、出現的緣由: 由於num是非靜態的,非靜態的成員變量數據是在每一個對象中都會維護一份數據的,三個線程對象就會有三份。線程
三、解決方案:把num票數共享出來給三個線程對象使用。使用static修飾。對象
2、方式二:
注意:靜態成員變量必需要定義在成員方法外,而不能定義在成員方法裏。
一、問題: 出現了線程安全問題 。資源
出現線程安全問題的根本緣由:
1)存在兩個或者兩個以上 的線程對象,並且線程之間共享着一個資源。
2)有多個語句操做了共享資源。(若是隻有單個語句操做共享資源,則不會出現線程安全問題)同步
二、線程安全問題的解決方案:sun提供了線程同步機制讓咱們解決這類問題的。變量
線程同步機制詳解見下一篇。程序