使用大量并发SwingWorkers

时间:2013-07-19 19:08:19

标签: java multithreading concurrency threadpool swingworker

我正在尝试使用大量的SwingWorkers(~100)。我有一个班级

Creature extends SwingWorker<Creature, Point>

我想让每个实例同时独立移动。我正在使用SwingWorker,因为每个实例化的位置都在GUI中表示并且不断更新。目前,只有10个会移动而其他人不会移动,因为the max thread limit of SwingWorker is 10.链接文章的建议是将每个SwingWorker放在自己的线程中,因为它们实现了Runnable并允许一个绕过该限制。

我试图这样做,但没有任何显示,所以显然我搞砸了。如何增加可用的SwingWorkers数量(使用文章中指定的方法或其他方式)?

Executor ex = Executors.newCachedThreadPool();
for(int i = 0; i < 20; i++){
   final Creature c = new Creature(this);
   Thread t = new Thread(c){
      public void run(){
         c.execute();  
      }
   };   
  ex.execute(t);
} 

1 个答案:

答案 0 :(得分:1)

我建议你写

Executor ex = Executors.newCachedThreadPool();
for(int i = 0; i < 20; i++){
   final Creature c = new Creature(this);
   ex.execute(new Runnable(){
      public void run(){
         c.execute();  
      }
   });   
} 

甚至可以将execute()更改为run()并制作生物Runnable

Executor ex = Executors.newCachedThreadPool();
for(int i = 0; i < 20; i++)
   ex.execute(new Creature(this));