2010-08-03 5 views
3

Я столкнулся с проблемой при создании приложения Blackberry, у меня есть до 7 threds вызовов, каждый из которых загружает аудио с сервера, и он отлично работает, но когда я запускаю свое приложение дважды, было исключено, что «СЛИШКОМ МНОГООБРАЗУЕТСЯ ОШИБКА ИСКЛЮЧЕНИЯ», Итак, дайте мне знать, как я могу решить эту проблему.TOO MANY THREADS ERROR EXCEPTION

+0

Обратите внимание, как никакие другие вопросы здесь имеют свое название все в шапках? Почему вы решили быть другим? – 2010-08-03 07:53:46

+0

, имея меньше потоков? –

ответ

5

Я думаю, вместо запуска 7 потоков использовать одну нить. 1. создать класс TaskWorker

public class TaskWorker implements Runnable { 
    private boolean quit = false; 
    private Vector queue = new Vector(); 

    public TaskWorker() { 
     new Thread(this).start(); 
    } 

    private Task getNext() { 
     Task task = null; 
     if (!queue.isEmpty()) { 
      task = (Task) queue.firstElement(); 
     } 
     return task; 
    } 

    public void run() { 
     while (!quit) { 
      Task task = getNext(); 
      if (task != null) { 
       task.doTask(); 
       queue.removeElementAt(task); 
      } else {// task is null and only reason will be that vector has no more tasks 
       synchronized (queue) { 
        try { 
         queue.wait(); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     } 
    } 

    public void addTask(Task task) { 
     synchronized (queue) { 
      if (!quit) { 
       queue.addElement(task); 
       queue.notify(); 

      } 

     } 
    } 

    public void quit() { 
     synchronized (queue) { 
      quit = true; 
      queue.notify(); 
     } 
    } 
} 

2. создать абстрактный класс Task

public abstract class Task { 

    abstract void doTask(); 
} 

3. Теперь создать задачу.

public class DownloadTask extends Task{ 

     void doTask() { 

      //do something 
     } 

    } 

4. и добавить эту задачу в taskworker нить

TaskWorker taskWorker = new TaskWorker(); 
        taskWorker.addTask(new DownloadTask()); 
+0

Спасибо, сэр, я попробую. – Farhan

1

Если это произойдет, когда вы переустановите приложение, это значит, что у вас должны быть некоторые зомби ... Вы уверены, что присоединились ко всем вашим темам?

+0

Да, я вызываю семь потоков один за другим в Invokelater(). – Farhan