如何在Java 中的兩個SwingWorker 類之間共享數據
簡介
使用時Java 應用程式中有多個線程,有時需要在它們之間共用資料。 SwingWorker 類別擴展了 SwingUtilities,提供了一種在單獨執行緒中執行耗時任務的便利方法,而不會阻塞主事件調度執行緒。
問題陳述
考慮這樣一個場景,您有兩個 SwingWorker 類別:FileLineCounterThread 和 FileDivisionThread,每個類別負責執行不同的任務。假設您要將結果從 FileLineCounterThread 傳遞到 FileDivisionThread。
解決方案
在SwingWorker 類別之間共享資料涉及兩個步驟:
從後台到EDT線程通訊:
監聽 EDT 執行緒中的屬性變更:
範例
範例import javax.swing.SwingWorker; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; public class DataSharingSwingWorker { public static void main(String[] args) { // Create the SwingWorker instances SwingWorker<Integer, Void> lineCounterWorker = new LineCounterWorker(); SwingWorker<String, Void> divisionWorker = new DivisionWorker(); // Add a listener to the line counter worker lineCounterWorker.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { if ("result".equals(evt.getPropertyName())) { // Retrieve the line count from the event int lineCount = (int) evt.getNewValue(); // Pass the line count to the division worker divisionWorker.passData(lineCount); } } }); // Execute the workers lineCounterWorker.execute(); divisionWorker.execute(); } private static class LineCounterWorker extends SwingWorker<Integer, Void> { @Override protected Integer doInBackground() throws Exception { // Perform line counting return null; // Placeholder for line count } @Override protected void done() { firePropertyChange("result", null, get()); } } private static class DivisionWorker extends SwingWorker<String, Void> { private int lineCount; public void passData(int lineCount) { this.lineCount = lineCount; } @Override protected String doInBackground() throws Exception { // Perform division operation based on the line count return null; // Placeholder for division result } @Override protected void done() { System.out.println("Division result: " + get()); } } }實作
實作以下程式碼片段示範如何實現上述步驟:
結論透過利用PropertyChangeListener機制,SwingWorker交易類別可以有效地在並行執行緒之間共享數據,從而在複雜的多執行緒應用程式中提供更大的靈活性和控制力。以上是如何在 Java 中的兩個 SwingWorker 類別之間共享資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!