Если вы углубитесь в код SwingWorker
, вы увидите следующую определенную константу:
/**
* number of worker threads.
*/
private static final int MAX_WORKER_THREADS = 10;
Следовательно, количество фоновых потоков никогда не может превышать это значение независимо от количества SwingWorker
, которые вы фактически создаете.
Один из способов изменить модель фоновой многопоточности - подключить собственный ExecutorService
к AppContext
, связанному с классом SwingWorker
. Однако, это немного хитро, учитывая, что AppContext
принадлежит sun.awt
и, следовательно, не является частью официального JDK API.
// Create single thread executor to force all background tasks to run on the same thread.
ExecutorService execService = Executors.newSingleThreadExecutor();
// Retrieve the AppContext. *CAUTION*: This is part of the sun.awt package.
AppContext ctxt = AppContext.getAppContext();
// Verify that nothing is already associated with SwingWorker.class within the context.
Object obj = ctxt.get(SwingWorker.class);
if (obj != null) {
throw new IllegalStateException("Object already associated with SwingWorker: " + obj);
}
// Install ExecutorService. Will be retrieved by the SwingWorker when execute() is called.
ctxt.put(SwingWorker.class, ctxt);