多線程(六)---多線程安全相關問題

多線程(六)---多線程安全相關問題

(一)多線程安全---問題代碼

問題代碼

(二) 產生多線程安全問題的緣由

   1.線程任務中有處理到共享的數據

   2.線程任務中有多個線程操做共享數據

      一個線程在操做共享數據的過程當中,其餘線程參與了運行,致使數據錯誤問題安全

   3.內存圖分析

內存狀態

(三) 解決思想

解決思想:多條線程操做同一數據源時。其中一條線程在操做,其餘線程不參與操做計算。多線程

(四) 解決方案

synchronized (對象){
            //同步的代碼塊
}

   代碼修改以下

class SaleTicket2 implements Runnable{
    private int tickets = 100;
    Object obj = new Object();
    public void run(){
        while (true){
            synchronized (obj){
                if (tickets>0){
                    System.out.println(Thread.currentThread().getName()+"------tickets:"+tickets--);
                }
            }
        }
    }
}
相關文章
相關標籤/搜索