程序1的運行結果:
程序1的輸出結果居然出了0號和-1號票,緣由就是synchronized放錯了位置,程序1將synchronized放在了if語句的後面,當b線程取出2好票之後,此時ticket=1,等下一次a、b、c線程來的時候,ticket=1>0就進入if語句體,這時cpu分給線程的時間片是先b在c後a這樣就致使了上面的結果。
程序2的輸出結果:
程序2的輸出結果看起來並無什麼錯誤,它沒有輸出0和-1號票,可是它沒有實現多個窗口售票的功能,它只有一個窗口在售票,緣由是咱們把鎖放錯了位置。一旦cpu將時間片分給一個線程,那麼這個窗口就必須把全部的票賣完。
鑑於以上兩種錯誤程序致使的結果,筆者建議你們使用同步方法這種方法比較方便。
關於生產者和消費者的問題,請參看「
模擬生產零件系統程序」。