我有一个处理某些东西的类。我正在尝试并行运行此类的多个实例。
但是,我不确定在TaskManager.startAll()
调用r.go()
时是否会导致 r 开始在自己的线程中或在主线程中运行?
我得到的总执行时间似乎非常高,尽管我尝试优化,但似乎没有任何效果。此外,如果我在 Netbeans 中对我的项目运行分析器,它会将所有线程显示为处于睡眠状态。所以我想知道我是否做错了什么?
这是类的结构:
public class TaskRunner implements Runnable {
private boolean isRunning = false;
public void run() {
while(true) {
while (! running) {
try {
Thread.sleep(1);
} catch (Exception e) {
e.printStackTrace();
}
}
process();
}
}
public void go() {
isRunning = true;
}
public void stop() {
isRunning = false;
}
private void process() {
//Do some number crunching and processing here
}
}
以下是它们的运行/管理方式:
public class TaskManager {
private ArrayList<TaskRunner> runners = new ArrayList<>();
public TaskManager() {
for (int i = 0; i < 10; i++) {
TaskRunner r = new TaskRunner();
new Thread(r).start();
runners.add(r);
}
}
public void startAll() {
for (TaskRunner r : runners) {
r.go();
}
}
}