2013-07-19 4 views
2

Я пытаюсь использовать большое количество SwingWorkers (~ 100). У меня есть классИспользование большого количества параллельных SwingWorkers

Creature extends SwingWorker<Creature, Point> 

и я хочу, чтобы каждое экземплярирование перемещалось независимо в одно и то же время. Я использую SwingWorker, поскольку позиция каждого экземпляра представлена ​​в графическом интерфейсе и постоянно обновляется. На данный момент только 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

Не передавайте Темы к Исполнителю. вместо этого пропустите Runnable. –

+0

@PeterLawrey Вы имеете в виду 'Runnable t = new Thread (c) {...}'? Я просто попробовал, это не сработало – Daniel

+0

Я имею в виду, что не создаю нить. Если это не работает, вы делаете что-то неправильно. 'Executor.execute (Runnable)' принимает Runnable. –

ответ

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)); 
Смежные вопросы