2010-08-03 43 views
3

我正在面临一个问题,同时使黑莓的应用程序,我有达7 threds电话,其中每个从服务器下载音频,它工作正常,但是当我开始我的应用程序两次然后一个未捕获异常已经发生,“太多线程错误异常”,所以,让我知道我该如何解决这个问题。太多的线程错误异常

+0

注意这里没有其他问题,如何有自己的全部大写的标题?你为什么选择与众不同? – 2010-08-03 07:53:46

+0

通过减少线程? – 2010-08-03 08:04:15

回答

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.创建一个抽象任务类

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 2010-08-03 10:45:16

1

如果它发生在您重新启动应用程序,这意味着您必须有一些僵尸... 您确定要加入您的所有线程吗?

+0

是的,我在Invokelater()中逐个调用七个线程。 – Farhan 2010-08-03 08:25:47

相关问题