首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java SE 實戰練習:隊列數據結構、對象序列化與多線程綜合應用

     編輯:Java 綜合教學

Java SE 實戰練習:隊列數據結構、對象序列化與多線程綜合應用

本示例演示如何結合數組實現的循環隊列、對象序列化持久化、多線程定時讀取與控制台交互輸入,構建一個簡單的名稱管理控制台程序。

核心功能模塊

  1. StringQueue 隊列:固定容量數組實現,支持 push(滿時自動移除最舊)和 pop 操作
  2. 序列化持久化:使用 ObjectOutputStream/ObjectInputStream 將隊列對象存儲至文件 E:\queue.txt
  3. 多線程協作:
    • 主線程:阻塞讀取控制台輸入,添加到隊列並持久化
    • 子線程:每 5 秒從文件反序列化隊列並打印內容

關鍵代碼片段

隊列實現(實現 Serializable)

class StringQueue implements Serializable {
    private String[] mNames;
    private int index = 0;
    private int nums;

    public StringQueue(int nums) {
        mNames = new String[nums];
        this.nums = nums;
    }

    public void push(String name) {
        if (index >= nums) pop();  // 滿時移除最舊
        mNames[index++] = name;
    }

    public void pop() {
        for (int i = 1; i < index; i++) mNames[i-1] = mNames[i];
        index--;
    }

    public String toString() {
        String mes = "";
        for (String name : mNames) mes += name + ",";
        return mes;
    }
}

主程序邏輯

public static void main(String[] args) throws Exception {
    names = getQueueObj();  // 啟動時加載持久化數據

    // 子線程:定時刷新並打印
    new Thread(() -> {
        while (true) {
            try {
                Thread.sleep(5000);
                names = getQueueObj();
                System.out.println(names);
            } catch (Exception e) { e.printStackTrace(); }
        }
    }).start();

    // 主線程:讀取控制台輸入
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    while (true) {
        String name = br.readLine();
        names.push(name);
        // 序列化保存
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E:\\queue.txt"));
        oos.writeObject(names);
        oos.close();
    }
}

運行效果演示

控制台運行截圖

技術要點總結

知識點應用場景
數組循環隊列固定容量、先進先出、自動覆蓋舊數據
對象序列化實現 Serializable、ObjectOutputStream/InputStream 文件持久化
多線程協作Thread + Runnable、sleep 定時任務、主線程阻塞 IO
文件操作File、FileOutputStream、FileInputStream 基礎 IO 流鏈

改進建議

  • 使用 ArrayDeque 替代手寫隊列,線程安全版用 ConcurrentLinkedQueue
  • 引入日志框架替代 System.out.println
  • 序列化建議改用 JSON(Jackson/Gson)提升可讀性與跨語言兼容性
  • 文件路徑硬編碼應提取至配置文件
  • 增加異常處理與資源關閉的 try-with-resources 寫法
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved