什么是可以运行的最大swing工作线程数
可以运行的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);
现在,如果您提交的实例超过n个SwingWorker
实例,则必须排队并等待池中的线程可用。
final int corePoolSize = 100; final int maximumPoolSize = 100; final long keepAliveTime = 100000; final TimeUnit unit = TimeUnit.SECONDS; final BlockingQueue workQueue = new ArrayBlockingQueue<>(maximumPoolSize); sun.awt.AppContext.getAppContext().put(SwingWorker.class, new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue));
上面的代码示例将允许您执行超过默认数量的SwingWorkers。 当然它正在访问一些后门sun.awt.AppContext类,但对于那些感兴趣的人来说,这是一个快速的解决方法,并且不能/不愿意提供他们自己的ExecutorService。