可以运行的Swing Worker线程的数量是否有上限,或者就内存支持而言是这样吗?这也是可配置的吗?
答案 0 :(得分:13)
SwingWorker
不是线程本身,而是将在线程中执行的任务。通常,您将使用ExecutorService
来执行SwingWorker
的实例;此接口还允许设置线程数:
int n = 20; // Maximum number of threads
ExecutorService threadPool = Executors.newFixedThreadPool(n);
SwingWorker w; //don't forget to initialize
threadPool.submit(w);
现在,如果您提交的实例数超过n SwingWorker
个,那么他们必须排队并等到池中的线程可用。
答案 1 :(得分:2)
final int corePoolSize = 100;
final int maximumPoolSize = 100;
final long keepAliveTime = 100000;
final TimeUnit unit = TimeUnit.SECONDS;
final BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(maximumPoolSize);
sun.awt.AppContext.getAppContext().put(SwingWorker.class,
new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue));
上面的代码示例将允许您执行超过默认数量的SwingWorkers。当然它正在访问一些后门sun.awt.AppContext类,但对于那些感兴趣的人来说,它是一个快速的解决方法,并且不能/不愿意提供他们自己的ExecutorService。