java 多線程 四個窗口賣100張票(升級版)4個線程一起賣 1000張票,每賣出100張。票價漲100

                            java 多線程 四個窗口賣100張票 


public class IOTest {
    public static void main(String[] args) {
        TicketSell t1 = new TicketSell();
        TicketSell t2 = new TicketSell();
        TicketSell t3 = new TicketSell();
        TicketSell t4 = new TicketSell();

        t1.setName("第一號窗口");
        t2.setName("第二號窗口");
        t3.setName("第三號窗口");
        t4.setName("第四號窗口");

        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}
class TicketSell extends Thread{

    private static int ticket = 100;

    @Override
    public void run() {
        //在循環開始外圍進行同步代碼塊,當第一個線程進入的時候,因爲一直在循環所以代碼沒有執行完
        //其他的線程不能執行該同步代碼塊的代碼
        while(ticket>0) {
            synchronized (TicketSell.class) {
                if(ticket>0){
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(this.getName()+"賣出第 "+ticket +"號票");
                    ticket--;
                }else{
                    break;
                }
            }
        }
    }
}

4個線程一起賣 1000張票,每賣出100張。票價漲100,原價500.最後打印每個線程賣出的票和總錢數

/**
 * @Auther: liuhaidong
 * Data: 2020/3/2 0002、18:12
 * Description:
 * @version: 1.0
 */
public class IOTest {
    public static void main(String[] args) {
        TicketSell t1 = new TicketSell();
        TicketSell t2 = new TicketSell();
        TicketSell t3 = new TicketSell();
        TicketSell t4 = new TicketSell();

        t1.setName("第一號窗口");
        t2.setName("第二號窗口");
        t3.setName("第三號窗口");
        t4.setName("第四號窗口");

        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}

class TicketSell extends Thread{

    private static int ticket = 1000;
    private static int index =0;
    private static int money = 500;
    @Override
    public void run() {
        //在循環開始外圍進行同步代碼塊,當第一個線程進入的時候,因爲一直在循環所以代碼沒有執行完
        //其他的線程不能執行該同步代碼塊的代碼
        while(ticket>0) {
            synchronized (TicketSell.class) {
                if(ticket>0){
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    money = (int) (Math.floor(index/100)*100)+500;
                    System.out.println(this.getName()+"賣出第 "+ticket +"號票"+money+"票錢");
                    ++index;
                    ticket--;
                }else{
                    break;
                }
            }
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章