当前位置: 代码迷 >> J2SE >> 单线程处理多个Task有关问题
  详细解决方案

单线程处理多个Task有关问题

热度:257   发布时间:2016-04-23 20:16:41.0
单线程处理多个Task问题
以下是一个实际工程中的部份代码,一个线程中创建10个Task 队列,但在创建10个ask 队列,FOR 循环只能运行
至一个队列,原因是Tase类中的execute() 是个无限循环方法,不有好的方法帮忙改造?
注:不希望将10个Task 队列改造成10个子线程

public class test{
    public static void main(String args[]) {
//初始化每个线程要执行的任务
taskList = new ArrayList();
for (int i = 0; i < 10; i++) 
                     {
taskList.add(new Task(i));
}
//定义一个线程
Thread workThread = new WorkThread(taskList, i);
workThread.start();
}

}

public class WorkThread extends Thread { 
private List taskList = null;   
private int threadId;  
private Task  task;
/**   
* 构造工作线程,为其指派任务列表,及命名线程 ID   
* @param taskList 欲执行的任务列表   
* @param threadId 线程 ID   
*/   
public WorkThread(List taskList,int threadId) {   
this.taskList = taskList;   
this.threadId = threadId;   
}   
                      public void run() {
      for (int i = 0; i < taskList.size(); i++) {
Task task = (Task) taskList.get(i);
task.execute();//-------程序循环时不能住下走,原因是Tase类中的execute() 是个无限循环方法,不                                 //有好的方法帮忙改造?????
}

}   





public class Task {
private boolean run = true; 
 private int taskId; 
 private Vector queueData = null;  
 //任务的初始化方法   
 public Task(int taskId,int queueId,String taskName {

this.taskId = taskId;
queueData = new Vector();   

/**
 * 执行任务队列
 */
public void execute() {

while (run) {
while (queueData.size() == 0) {

try {

Thread.sleep(1000);

} catch (InterruptedException interruptedexception) {
interruptedexception.printStackTrace();
}
}
}

sxl_qq
------解决思路----------------------
实际情况是,你的queueData才是真正的runnable的内容?

这个我估计你要改的地方不少。

当然,换个思路,把你的task改造成一个类似线程池入口的东西。

往task里往任务,就相当于往线程池里放东西,这样你线程池就不用再去执行Task里的Execute了。。。
------解决思路----------------------
既然是任务应该有终结的时候啊,你的任务代码为什么要一直循环下去呢。可否告知任务具体干什么,在什么条件下终止
------解决思路----------------------
引用:
Quote: 引用:

实际情况是,你的queueData才是真正的runnable的内容?

这个我估计你要改的地方不少。

当然,换个思路,把你的task改造成一个类似线程池入口的东西。

往task里往任务,就相当于往线程池里放东西,这样你线程池就不用再去执行Task里的Execute了。。。

我原来的想法是想定义几个线程,每个线程下执行10个Task
你的意思是将Task改造成Thread?
根据你的代码,你的task就像线程,关键是不知道你要做什么,为什么要在task中定义无限循环,有没有给出退出循环的条件。即使是无限循环也可以退出啊,只要将run改为false
------解决思路----------------------
我的博文,处理队列了,希望对你有用
http://blog.csdn.net/weinianjie1/article/details/6563102
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

实际情况是,你的queueData才是真正的runnable的内容?

这个我估计你要改的地方不少。

当然,换个思路,把你的task改造成一个类似线程池入口的东西。

往task里往任务,就相当于往线程池里放东西,这样你线程池就不用再去执行Task里的Execute了。。。

我原来的想法是想定义几个线程,每个线程下执行10个Task
你的意思是将Task改造成Thread?
根据你的代码,你的task就像线程,关键是不知道你要做什么,为什么要在task中定义无限循环,有没有给出退出循环的条件。即使是无限循环也可以退出啊,只要将run改为false


Task会不断监听是否有消息进入,有就不断取出
既然是这样的话,就将task改为线程吧,明显是多线程问题
  相关解决方案