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

Java 回調與線程處理耗時響應全流程實戰

     編輯:Java 相關知識

WebService 調用、遠程 RPC、複雜運算等長耗時操作若同步阻塞主線程,會導致 UI 凍結、回應停滯。本文示範「回調 + 線程」異步模式:主線程發起請求即返回,耗時任務背景執行完成後回調通知結果。

架構角色

  • Viewer (調用者):代表 UI/主流程,持有計數器,提供 printNewCount() 顯示結果
  • LongTimeResponse (被調用者):內部啟動線程執行耗時任務,完成後回調 Viewer.printNewCount()

核心代碼

Viewer 類別

public class Viewer {
    private int count;
    public Viewer(int count) { this.count = count; }
    public void printNewCount(int newCount) {
        System.out.println("New Count=" + newCount);
    }
    public int getCount() { return count; }
    public void setCount(int count) { this.count = count; }
}

LongTimeResponse 類別

package com.sitinspring;

public class LongTimeResponse implements Runnable {
    private Viewer viewer;
    private int count;
    
    public LongTimeResponse(Viewer viewer) {
        this.viewer = viewer;
        this.count = viewer.getCount();
        caculateNewCount(); // 啟動異步計算
    }
    
    private void caculateNewCount() {
        Thread thread = new Thread(this);
        thread.start(); // 背景線程執行 run()
    }
    
    public void run() {
        try { Thread.sleep(10000); } // 模擬 10 秒耗時操作
        catch (Exception ex) { ex.printStackTrace(); }
        viewer.printNewCount(count * count * count); // 回調通知結果
    }
}

執行流程與輸出

Viewer viewer = new Viewer(10);
LongTimeResponse ltr = new LongTimeResponse(viewer);
viewer.printNewCount(123); // 主線程立即執行

輸出順序:

New Count=123          // 立即輸出,主線程未阻塞
... 10 秒後 ...
New Count=1000         // 背景線程完成,回調輸出

關鍵設計要點

  1. 異步非阻塞:主線程發起請求後立即繼續,無等待
  2. 回調引用:LongTimeResponse 持有 Viewer 引用,完成時主動通知
  3. 線程隔離:耗時邏輯封裝於 run(),由獨立線程執行
  4. 異常處理:背景線程異常不影響主線程,記錄日誌即可

擴展建議

  • 引入 Future/CompletableFuture (JDK 1.5+/1.8) 統一異步結果處理
  • 使用 ExecutorService 管理線程池,避免頻繁建立銷毀
  • 加入超時機制:Future.get(timeout, TimeUnit) 防止無限等待
  • UI 框架(Swing/JavaFX/Android)需在事件派發線程更新介面,回調中用 SwingUtilities.invokeLater() 等轉派

結語

「回調 + 線程」是處理耗時操作的經典模式,核心在於主流程不等待、結果主動通知。現代開發建議配合 CompletableFuture、RxJava、Kotlin Coroutines 等高階異步框架,進一步簡化錯綜複雜的回調鏈。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved