Java에서 두 SwingWorker 클래스 간에 데이터를 공유하는 방법
소개
작업할 때 Java 애플리케이션의 여러 스레드로 인해 스레드 간에 데이터를 공유해야 하는 경우가 있습니다. SwingUtilities를 확장하는 SwingWorker 클래스는 기본 이벤트 전달 스레드를 차단하지 않고 별도의 스레드에서 시간이 많이 소요되는 작업을 수행하는 편리한 방법을 제공합니다.
문제 설명
각각 서로 다른 작업을 수행하는 두 개의 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()); } } }
결론
SwingWorker 클래스는 PropertyChangeListener 메커니즘을 활용하여 병렬 스레드 간에 데이터를 효과적으로 공유할 수 있으므로 복잡한 다중 스레드 애플리케이션에서 더 큰 유연성과 제어가 가능합니다.
위 내용은 Java에서 두 SwingWorker 클래스 간에 데이터를 공유하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!