什么是可以运行的最大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。