多项任务洞察一项服务
Several Tasks insight one Service
我感兴趣的是有没有 运行 例如 7 Tasks insight 一项服务?
private final DataService service = new DataService();
class DataService extends ScheduledService<Void>
{
@Override
protected Task<Void> createTask()
{
return new Task<Void>()
{
@Override
protected Void call() throws Exception
{
// Several tasks
return null;
}
};
}
}
在我的例子中,我需要 运行 并行执行任务。
class DataService extends ScheduledService<Void>
{
private int numTasks ;
public DataService(int numTasks) {
setExecutor(Executors.newCachedThreadPool(r -> {
Thread t = new Thread(r);
t.setDaemon(true);
return t ;
}));
this.numTasks = numTasks ;
}
@Override
protected Task<Void> createTask()
{
return new Task<Void>()
{
@Override
protected Void call() throws Exception
{
// Several tasks
for (int i = 0; i < numTasks ; i++) {
final int taskNumber = i ;
Runnable task = () -> {
// code to execute task taskNumber...
};
getExecutor().execute(task);
}
return null;
}
};
}
}
请注意,调用方法将 return 立即(即在各个任务完成之前),此时服务将进入 "succeeded" 状态。如果你想让 call()
方法等待单个任务完成,你可以这样做:
class DataService extends ScheduledService<Void>
{
private int numTasks ;
private final ExecutorService exec = Executors.newCachedThreadPool(r -> {
Thread t = new Thread(r);
t.setDaemon(true);
return t ;
});
public DataService(int numTasks) {
setExecutor(exec);
this.numTasks = numTasks ;
}
@Override
protected Task<Void> createTask()
{
return new Task<Void>()
{
@Override
protected Void call() throws Exception
{
// Several tasks
List<Callable<Void>> tasks = new ArrayList<>();
for (int i = 0; i < numTasks; i++) {
final int taskNumber = i ;
Callable<Void> task = () -> {
// code to execute task taskNumber...
return null ;
};
tasks.add(task);
}
exec.invokeAll(tasks);
return null;
}
};
}
}
我感兴趣的是有没有 运行 例如 7 Tasks insight 一项服务?
private final DataService service = new DataService();
class DataService extends ScheduledService<Void>
{
@Override
protected Task<Void> createTask()
{
return new Task<Void>()
{
@Override
protected Void call() throws Exception
{
// Several tasks
return null;
}
};
}
}
在我的例子中,我需要 运行 并行执行任务。
class DataService extends ScheduledService<Void>
{
private int numTasks ;
public DataService(int numTasks) {
setExecutor(Executors.newCachedThreadPool(r -> {
Thread t = new Thread(r);
t.setDaemon(true);
return t ;
}));
this.numTasks = numTasks ;
}
@Override
protected Task<Void> createTask()
{
return new Task<Void>()
{
@Override
protected Void call() throws Exception
{
// Several tasks
for (int i = 0; i < numTasks ; i++) {
final int taskNumber = i ;
Runnable task = () -> {
// code to execute task taskNumber...
};
getExecutor().execute(task);
}
return null;
}
};
}
}
请注意,调用方法将 return 立即(即在各个任务完成之前),此时服务将进入 "succeeded" 状态。如果你想让 call()
方法等待单个任务完成,你可以这样做:
class DataService extends ScheduledService<Void>
{
private int numTasks ;
private final ExecutorService exec = Executors.newCachedThreadPool(r -> {
Thread t = new Thread(r);
t.setDaemon(true);
return t ;
});
public DataService(int numTasks) {
setExecutor(exec);
this.numTasks = numTasks ;
}
@Override
protected Task<Void> createTask()
{
return new Task<Void>()
{
@Override
protected Void call() throws Exception
{
// Several tasks
List<Callable<Void>> tasks = new ArrayList<>();
for (int i = 0; i < numTasks; i++) {
final int taskNumber = i ;
Callable<Void> task = () -> {
// code to execute task taskNumber...
return null ;
};
tasks.add(task);
}
exec.invokeAll(tasks);
return null;
}
};
}
}