我在制作Blackberry应用程序时面临一个问题,我有多达7次调用,其中每个都从服务器下载音频并且工作正常但是当我启动我的应用程序两次然后发生了未捕获的异常“太多线程错误例外”,所以,让我知道如何解决这个问题。
答案 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 = new TaskWorker();
taskWorker.addTask(new DownloadTask());
答案 1 :(得分:1)
如果在重新启动应用程序时发生这种情况,则表示您必须拥有一些僵尸...... 您确定要加入所有线程吗?