Swing Worker线程的数量是否有上限,还是只要内存支持就可以无限增加?另外,这个配置能否在某处进行调整?
Swing Worker线程的数量是否有上限,还是只要内存支持就可以无限增加?另外,这个配置能否在某处进行调整?
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);
SwingWorker
实例,它们将必须排队等待,直到线程池中的线程可用。SwingWorker#execute()
方法时,它会安排任务。此方法将SwingWorker计划在工作线程上执行。有很多可用的工作线程。如果您自己实现线程池,这相当于重复造轮子。SwingWorker
是一个实用程序,以避免重复制造轮子。唯一需要这样做的原因是默认池大小10太小,此时您应该使用原始的Runnable
。 - searchengine27final 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的人来说,这是一个快速解决方法。