1. 程式人生 > >Java多執行緒_複習

Java多執行緒_複習

java多執行緒的常見例子

一.相關知識:

Java多執行緒程式設計到的知識:

(一)對同一個數量進行操作

(二)對同一個物件進行操作

(三)回撥方法使用

(四)執行緒同步,死鎖問題

(五)執行緒通訊

 等等

二.示例一:三個售票視窗同時出售20張票;

 

程式分析:1.票數要使用同一個靜態值

 2.為保證不會出現賣出同一個票數,要java多執行緒同步鎖。

設計思路:1.建立一個站臺類Station,繼承Thread,重寫run方法,在run方法裡面執行售票操作!售票要使用同步鎖:即有一個站臺賣這張票時,其他站臺要等這張票賣完!

2.建立主方法呼叫類

 

(一)建立一個站臺類,繼承Thread

package com.com.shundong.thread;

/**
 * @ClassName Station
 * @Description 三個售票視窗同時出售20張票
 * @Author shundong
 * @Date 2018/12/8 12:31 AM
 * @Version 1.0
 **/
public class Station extends Thread {
    // 通過構造方法給執行緒名字賦值
    public Station(String name) {
        super(name);// 給執行緒名字賦值
    }

    // 為了保持票數的一致,票數要靜態
    static int tick = 20;

    // 建立一個靜態鑰匙
    static Object ob = "test";//值是任意的

    // 重寫run方法,實現買票操作
    @Override
    public void run() {
        while (tick > 0) {
            synchronized (ob) {// 這個很重要,必須使用一個鎖,
                // 進去的人會把鑰匙拿在手上,出來後才把鑰匙拿讓出來
                if (tick > 0) {
                    System.out.println(getName() + "賣出了第" + tick-- + "張票");
                    //tick--;
                } else {
                    System.out.println("票賣完了");
                }
            }
            try {
                sleep(1000);//休息一秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }

    // for test
    public static void main(String[] args) {
        Station station1 = new Station("站臺一");
        Station station2 = new Station("站臺二");
        Station station3 = new Station("站臺仨");
        station1.start();
        station2.start();
        station3.start();
    }
}

程式執行結果:  

可以看到票數是不會有錯的!