任务的提交者和执行者
为了方便并发执行任务,出现了一种专门用来执行任务的实现,也就是Executor。
由此,任务提交者不需要再创建管理线程,使用更方便,也减少了开销。
java.util.concurrent.Executors是Executor的工厂类,通过Executors可以创建你所需要的Executor。
任务的提交者和执行者之间的通讯手段
ExecutorServiceexecutor = Executors.newSingleThreadExecutor();
Callable<Object> task = newCallable<Object>() {
publicObject call() throwsException {
Object result = "...";
returnresult;
}
};
Future<Object> future = executor.submit(task);
future.get();
有两种任务:
Runnable
Callable
Callable是需要返回值的任务
Task Submitter
Future<Object> future = executor.submit(task);
// 等待到任务被执行完毕返回结果
// 如果任务执行出错,这里会抛ExecutionException
future.get();
//等待3秒,超时后会抛TimeoutException
future.get(3, TimeUnit.SECONDS);
Task Executor
Callable<Object> task = newCallable<Object>() {publicObject call() throwsException {Object result = …;returnresult;}};
Task Submitter把任务提交给Executor执行,他们之间需要一种通讯手段,这种手段的具体实现,通常叫做Future。Future通常包括get(阻塞至任务完成),cancel,get(timeout)(等待一段时间)等等。Future也用于异步变同步的场景。
为了方便并发执行任务,出现了一种专门用来执行任务的实现,也就是Executor。
由此,任务提交者不需要再创建管理线程,使用更方便,也减少了开销。
java.util.concurrent.Executors是Executor的工厂类,通过Executors可以创建你所需要的Executor。
任务的提交者和执行者之间的通讯手段
ExecutorServiceexecutor = Executors.newSingleThreadExecutor();
Callable<Object> task = newCallable<Object>() {
publicObject call() throwsException {
Object result = "...";
returnresult;
}
};
Future<Object> future = executor.submit(task);
future.get();
有两种任务:
Runnable
Callable
Callable是需要返回值的任务
Task Submitter
Future<Object> future = executor.submit(task);
// 等待到任务被执行完毕返回结果
// 如果任务执行出错,这里会抛ExecutionException
future.get();
//等待3秒,超时后会抛TimeoutException
future.get(3, TimeUnit.SECONDS);
Task Executor
Callable<Object> task = newCallable<Object>() {publicObject call() throwsException {Object result = …;returnresult;}};
Task Submitter把任务提交给Executor执行,他们之间需要一种通讯手段,这种手段的具体实现,通常叫做Future。Future通常包括get(阻塞至任务完成),cancel,get(timeout)(等待一段时间)等等。Future也用于异步变同步的场景。