我正在尝试尝试多线程编程(对我来说是新的),我有一些问题。
我正在使用一个ThreadPoolTaskExecutor
带有实现的 TestTaskRunnable
和一个run
休眠 X 秒的方法。一切都很顺利,我所有的 TestTask 都在不同的线程中执行。好的。现在棘手的部分是我想知道在线程中进行的操作的结果。因此,我在 Google/stack/etc 上阅读了一些内容,并尝试使用Future
. 而且它不再运作良好:/
我使用该get
方法来获取(哦,真的吗?)该call
方法的结果并且该部分正在工作,但是 TestTask 一个接一个地执行(而不是像以前那样同时执行)。所以我猜我没有正确理解某些东西,但我不知道是什么......这就是为什么我需要你的帮助!
启动测试的类:
public void test(String test) {
int max = 5;
for (int i = 0; i < max; i++) {
TestThreadService.launch(i);
}
System.out.println("END");
}
TestThreadService 类:
public class TestThreadService {
private ThreadPoolTaskExecutor taskExecutor;
public void launch(int i) {
System.out.println("ThreadNumber : "+i);
taskExecutor.setWaitForTasksToCompleteOnShutdown(false);
TestTask testTask = new TestTask(i);
FutureTask<Integer> futureOne = new FutureTask<Integer>(testTask);
taskExecutor.submit(futureOne);
try {
Integer result = futureOne.get();
System.out.println("LAUNCH result : "+i+" - "+result);
} catch (Exception e) {
e.printStackTrace();
}
}
public void setTaskExecutor(ThreadPoolTaskExecutor taskExecutor) {
this.taskExecutor = taskExecutor;
}
}
和 TestTask 类:
public class TestTask implements Callable<Integer> {
public Integer threadNumber;
private Integer valeur;
public TestTask(int i) {
this.threadNumber = i;
}
public void setThreadNumber(Integer threadNumber) {
this.threadNumber = threadNumber;
}
@Override
public Integer call() throws Exception {
System.out.println("Thread start " + threadNumber);
// generate sleeping time
Random r = new Random();
valeur = 5000 + r.nextInt(15000 - 5000);
System.out.println("Thread pause " + threadNumber + " " + valeur);
try {
Thread.sleep(valeur);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread stop" + threadNumber);
return this.valeur;
}
}
我在 Java 方面还不错,但这是我第一次尝试使用不同的线程,所以对我来说有点新。
我究竟做错了什么 ?
谢谢 !