单线程处理多个Task有关问题
单线程处理多个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了。。。
------解决思路----------------------
既然是任务应该有终结的时候啊,你的任务代码为什么要一直循环下去呢。可否告知任务具体干什么,在什么条件下终止
------解决思路----------------------
根据你的代码,你的task就像线程,关键是不知道你要做什么,为什么要在task中定义无限循环,有没有给出退出循环的条件。即使是无限循环也可以退出啊,只要将run改为false
------解决思路----------------------
我的博文,处理队列了,希望对你有用
http://blog.****.net/weinianjie1/article/details/6563102
------解决思路----------------------
既然是这样的话,就将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了。。。
------解决思路----------------------
既然是任务应该有终结的时候啊,你的任务代码为什么要一直循环下去呢。可否告知任务具体干什么,在什么条件下终止
------解决思路----------------------
根据你的代码,你的task就像线程,关键是不知道你要做什么,为什么要在task中定义无限循环,有没有给出退出循环的条件。即使是无限循环也可以退出啊,只要将run改为false
------解决思路----------------------
我的博文,处理队列了,希望对你有用
http://blog.****.net/weinianjie1/article/details/6563102
------解决思路----------------------
根据你的代码,你的task就像线程,关键是不知道你要做什么,为什么要在task中定义无限循环,有没有给出退出循环的条件。即使是无限循环也可以退出啊,只要将run改为false
实际情况是,你的queueData才是真正的runnable的内容?
这个我估计你要改的地方不少。
当然,换个思路,把你的task改造成一个类似线程池入口的东西。
往task里往任务,就相当于往线程池里放东西,这样你线程池就不用再去执行Task里的Execute了。。。
我原来的想法是想定义几个线程,每个线程下执行10个Task
你的意思是将Task改造成Thread?
Task会不断监听是否有消息进入,有就不断取出