1. 程式人生 > >Java多線程對同一個對象進行操作

Java多線程對同一個對象進行操作

rac 程序 obj 線程同步 操作 ted 同時 構造 設計思路

示例:

三個窗口同時出售20張票。

程序分析:

1、票數要使用一個靜態的值。

2、為保證不會出現賣出同一張票,要使用同步鎖。

3、設計思路:創建一個站臺類Station,繼承THread,重寫run方法,在run方法內部執行售票操作!

售票要使用同步鎖:即有一個站臺賣這張票時,其他站臺要等待這張票賣完才能繼續賣票!

package com.multi_thread;

//站臺類
public class Station extends Thread {
    // 通過構造方法給線程名字賦值
    public Station(String name) {
        super(name);//
給線程起名字 } // 為了保持票數的一直,票數要靜態 static int tick = 20; // 創建一個靜態鑰匙 static Object ob = "aa";// 值是任意的 @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(); } } } }
package com.multi_thread;

public class MainClass {
    // java多線程同步所的使用
    // 三個售票窗口同時出售10張票
    public static void main(String[] args) {
        // 實例化站臺對象,並為每一個站臺取名字
        Station station1 = new Station("窗口1");
        Station station2 = new Station("窗口2");
        Station station3 = new Station("窗口3");
        // 讓每一個站臺對象各自開始工作
        station1.start();
        station2.start();
        station3.start();
    }
}

程序運行結果:

窗口1賣出了第20張票
窗口3賣出了第19張票
窗口2賣出了第18張票
窗口2賣出了第17張票
窗口3賣出了第16張票
窗口1賣出了第15張票
窗口1賣出了第14張票
窗口3賣出了第13張票
窗口2賣出了第12張票
窗口1賣出了第11張票
窗口3賣出了第10張票
窗口2賣出了第9張票
窗口1賣出了第8張票
窗口3賣出了第7張票
窗口2賣出了第6張票
窗口1賣出了第5張票
窗口3賣出了第4張票
窗口2賣出了第3張票
窗口3賣出了第2張票
窗口1賣出了第1張票

Java多線程對同一個對象進行操作