СЛИШКОМ МНОГО НИТЕЙ, ИСКЛЮЧЕНИЕ ОШИБКИ - PullRequest
3 голосов
/ 03 августа 2010

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

Ответы [ 2 ]

5 голосов
/ 03 августа 2010

Я думаю, вместо 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 = new TaskWorker();
                    taskWorker.addTask(new DownloadTask());
1 голос
/ 03 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...