【发布时间】:2017-08-15 09:29:15
【问题描述】:
我有这个用于多线程的 Worker 类。
public class Worker extends SwingWorker<Void , String>
{
private int optionOfWork;
public Worker(int int optionOfWork)
{
this.optionOfWork = optionOfWork;
}
...
...
protected Void doInBackground() throws Exception
{
switch (optionOfWork) {
case 1:
{
...
...
break;
}
case 2:
{
...
something...
}
default:
{
...
}
}
}//doInBackground()
}//Worker class
假设我创建了一个工作线程实例:
Worker worker1 = new Worker(1);
我使用worker1.excute();启动它
现在,在 optionOfWork = 1 的情况下,worker 立即启动doInBackground() 方法。
我可以像这样在执行过程中改变(从主线程)工人的工作吗:
worker1.setOptionOfWork(2);
worker1.excute();
或者也许:
worker1.setOptionOfWork(2);
worker1.doInBackground();
它会停止当前的执行并开始执行案例:doInBackground() 方法的 optionOfWork = 2?
【问题讨论】:
-
不,你至少必须打断工人,而且它很可能会失去他之前处理的所有内容。除非您专门编写可中断性和处理检查点,否则它将不再是默认工作器。
-
另外,
doInBackground()强制你的调用线程执行计算。 -
感谢您对我的回答的反馈 ;-)
标签: java multithreading swingworker