多線程經典問題之多窗口賣票

需求:簡單的賣票程序,要實現多個窗口同時買票。 
1、方式一: 

一、問題:爲何50張票被賣出了150次? 
安全

二、出現的緣由: 由於num是非靜態的,非靜態的成員變量數據是在每一個對象中都會維護一份數據的,三個線程對象就會有三份。線程

三、解決方案:把num票數共享出來給三個線程對象使用。使用static修飾。對象

2、方式二: 

注意:靜態成員變量必需要定義在成員方法外,而不能定義在成員方法裏。 
一、問題: 出現了線程安全問題 。資源

出現線程安全問題的根本緣由: 
1)存在兩個或者兩個以上 的線程對象,並且線程之間共享着一個資源。 
2)有多個語句操做了共享資源。(若是隻有單個語句操做共享資源,則不會出現線程安全問題)同步

二、線程安全問題的解決方案:sun提供了線程同步機制讓咱們解決這類問題的。變量

線程同步機制詳解見下一篇。程序

相關文章
相關標籤/搜索