看完多執行緒初級篇的童鞋就可以看執行緒中級篇(一)了
class threaddemoone implements runnable catch (interruptedexception e)
//假設a1先復活了(a1就是每次都能搶到。。好巧~~a2...別怪我)
//列印票數t=1,接著票數t-1=0. a1執行結束了,退出 此時票數已經等於0,按道理不可以在進行售票了
//a2活了 這時a2已經進入到if裡面,即使t=0,卻沒有再判斷了,而是直接把t=0列印,接著票數t-1=-1.
system.out.println(thread.currentthread().getname()+"--sale....:"+t--);
}//}
} }}public class thread2
}
大家看上面這段簡單的賣票程式,我先把synchronized(obj)同步鎖注釋掉,來說明問題
執行結果如下:
竟然出現了0號票。。。(我們去12306**}上是買不到0號票的好嗎~~)
原因我就以注釋的形式寫在**中。
該程式中導致不安全性的問題,就是沒有再次判斷if條件,我們想象著在if前加一把鎖,當有執行緒進入時,就把鎖給鎖上了,其他執行緒看到鎖被鎖上後,就只好在門口等待。
大家可以把這個與火車上的廁所聯絡在一起,有人進入廁所後,就會轉動門把,把門鎖住,其他人看到鎖被鎖住,就知道裡面有人,而在外面等待!
synchronized(obj)這個就是用來實現鎖的問題!括號中用到的就叫鎖,可以是任意的唯一物件,比如本文中新建的object obj物件,也可以是類物件
threaddemoone
.class或者thread2.class,只要是唯一的物件即可。
多執行緒系列(二) 多執行緒基礎
目錄 一 執行緒的幾種狀態 屬性 方法 執行緒的5個狀態 1 建立狀態 new 對應 thread th new thread worker 時 就建立了乙個新的執行緒,僅僅是新建狀態,程式還沒有執行執行緒中的 2 就緒狀態 runnable 對應 th.start 方法,新建執行緒在接收到star...
java多執行緒系列03
建立執行緒的兩種方式 1繼承thread類,步驟 1定義類繼承thread 2複寫thread類中的run方法,目的 將自定義的 儲存在run方法,讓執行緒執行 3呼叫該執行緒的start方法,該方法兩個作用 啟動執行緒,呼叫run方法。此時執行緒處於runnable狀態 從而使執行緒啟動去同其他執...
Java基礎 多執行緒
多執行緒的概念,如何在程式中建立多執行緒 thread runnable 執行緒安全問題,執行緒的同步,執行緒之間的通訊 死鎖。一 建立執行緒和啟動執行緒。為什麼要覆蓋run方法 thread類用於描述執行緒。該類就定義了乙個功能。用於儲存執行緒要執行的 該儲存功能就是run方法。也就是說threa...