Java 任务什么都不做?
Java task does nothing?
我有一个程序,我在其中使用由 ExecutorService 控制的多个任务。我实际上使用了 Runnable 现在将其更改为任务,但是我似乎做错了什么因为我的任务中应该发生的一切都是 而不是 发生.我应该提一下,程序不会完成,它会无限运行。有人可以告诉我我缺少什么吗?
public class Test{
ExecutorService exec;
public Test (){
exec = Executors.newCachedThreadPool();
run();
}
public static void main(String[] args) {
Test test = new Test();
}
private void run() {
System.out.println("This works normal");
Task<Void> task = new Task<Void>() {
@Override
protected Void call(){
System.out.println("Here nothing happens already");
for (int i = 0; i < 10; i++)
exec.submit(() -> { System.out.println("Offcourse no sub-task works either"); });
return null;
}
};
exec.submit(task);
}
}
这些是我的进口商品:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javafx.concurrent.Task;
I use:
- Netbeans IDE 8.2
- Java
- Windows 10 Pro
作为一个不寻常的特性,Task
(它是 javafx 包的一部分)实现了 Callable
和 Runnable
。当您将任务提交给 ExecutorService
时,它会调用 Task.run
方法,该方法在 Task
中有一个空的 stubbed-out 实现。如果您在匿名 class 中覆盖 run
那么您将看到您的代码 运行.
您是否考虑过直接从 Callable
中创建一个匿名的 class?或者你是故意使用 Task
class 因为你正在使用 JavaFX?
如果您正在使用 JavaFX 并且有意使用 Task
,那么 Task
API 建议如下:
Although ExecutorService defines several methods which take a
Runnable, you should generally limit yourself to using the execute
method inherited from Executor.
call
方法通常用于使用 Service
要关闭 ExecutorService
,您应该调用 exec.shutdown()
。
我有一个程序,我在其中使用由 ExecutorService 控制的多个任务。我实际上使用了 Runnable 现在将其更改为任务,但是我似乎做错了什么因为我的任务中应该发生的一切都是 而不是 发生.我应该提一下,程序不会完成,它会无限运行。有人可以告诉我我缺少什么吗?
public class Test{
ExecutorService exec;
public Test (){
exec = Executors.newCachedThreadPool();
run();
}
public static void main(String[] args) {
Test test = new Test();
}
private void run() {
System.out.println("This works normal");
Task<Void> task = new Task<Void>() {
@Override
protected Void call(){
System.out.println("Here nothing happens already");
for (int i = 0; i < 10; i++)
exec.submit(() -> { System.out.println("Offcourse no sub-task works either"); });
return null;
}
};
exec.submit(task);
}
}
这些是我的进口商品:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javafx.concurrent.Task;
I use:
- Netbeans IDE 8.2
- Java
- Windows 10 Pro
作为一个不寻常的特性,Task
(它是 javafx 包的一部分)实现了 Callable
和 Runnable
。当您将任务提交给 ExecutorService
时,它会调用 Task.run
方法,该方法在 Task
中有一个空的 stubbed-out 实现。如果您在匿名 class 中覆盖 run
那么您将看到您的代码 运行.
您是否考虑过直接从 Callable
中创建一个匿名的 class?或者你是故意使用 Task
class 因为你正在使用 JavaFX?
如果您正在使用 JavaFX 并且有意使用 Task
,那么 Task
API 建议如下:
Although ExecutorService defines several methods which take a Runnable, you should generally limit yourself to using the execute method inherited from Executor.
call
方法通常用于使用 Service
要关闭 ExecutorService
,您应该调用 exec.shutdown()
。