自制悲觀鎖


馬克- to-win:馬克 java社區(qū):防盜版實名手機(jī)尾號: 73203。
例 2.2.1.1

package com;
public class Ticket_Pess_MarkToWin {
    private int number=4;
    private int lock=0;
    public synchronized int getLock()
    {
(購買完整教程)
            System.out.println("最后還剩"+number);
        }else{
            System.out.println("不夠了,買幾張失敗");
        }
    }      
  
}





package com;
class MulThreMarkToWin extends Thread {
    Ticket_Pess_MarkToWin ticPes_MarkToWin;
    public MulThreMarkToWin(Ticket_Pess_MarkToWin ticPes_MarkToWin) {
(購買完整教程)
            System.out.println("沒拿到鎖,沒干成");
        }
    }
}
class MulThreMarkToWinBatch extends Thread {
    Ticket_Pess_MarkToWin ticPes_MarkToWin;
    public MulThreMarkToWinBatch(Ticket_Pess_MarkToWin ticPes_MarkToWin) {
        this.ticPes_MarkToWin=ticPes_MarkToWin;
    }
    public void run() {
(購買完整教程)
    }
}
public class TestConcurBuy_MarkToWin {
    public static void main(String[] args) {
        Ticket_Pess_MarkToWin ticPes_MarkToWin=new Ticket_Pess_MarkToWin();
        Thread t1 = new MulThreMarkToWin(ticPes_MarkToWin);
        Thread t2 = new MulThreMarkToWinBatch(ticPes_MarkToWin);
        Thread t3 = new MulThreMarkToWin(ticPes_MarkToWin);
        t1.start();
        t2.start();
        t3.start();
    }
}




輸出結(jié)果:


鎖的synchronized,導(dǎo)致等很長時間,用睡覺來模擬
買一張成功
最后還剩3
鎖的synchronized,導(dǎo)致等很長時間,用睡覺來模擬
買一張成功
最后還剩2
鎖的synchronized,導(dǎo)致等很長時間,用睡覺來模擬
不夠了,買幾張失敗


再運(yùn)行一遍,可能輸出的結(jié)果是:


鎖的synchronized,導(dǎo)致等很長時間,用睡覺來模擬
買一張成功
最后還剩3
鎖的synchronized,導(dǎo)致等很長時間,用睡覺來模擬
買幾張成功
最后還剩0
鎖的synchronized,導(dǎo)致等很長時間,用睡覺來模擬
不夠了,買一張失敗