什么是可以运行的最大swing工作线程数

时间:2011-12-02 13:09:57

标签: java multithreading swing swingworker

可以运行的Swing Worker线程的数量是否有上限,或者就内存支持而言是这样吗?这也是可配置的吗?

2 个答案:

答案 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。