线程池利用FutureTask执行Callable子类,获取执行结果的例子
2017-04-20 10:46
330 查看
很多情况下,子类继承了Runnable和Thread,只能保证这个线程执行,而不能获取线程执行的结果,为了获取线程的执行结果,我们可以让子类继承于Callable,这样就可以获取执行的结果
package test;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
class Item implements Callable<Integer> {
private int first;
private int second;
public Item(int first, int second) {
this.first = first;
this.second = second;
}
@Override
public Integer call() throws Exception {
return this.first * this.second;
}
}
public class CallBackThread {
public static void main(String[] args) throws InterruptedException, ExecutionException {
//創建了大小為8的線程池
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(8);
List<FutureTask<Integer>> futureTasks = new ArrayList<FutureTask<Integer>>();
for (int i = 0; i < 100; i++) {
FutureTask<Integer> futureTask = new FutureTask<Integer>(new Item(i, (i + 1) * (i - 1)));
futureTasks.add(futureTask);
fixedThreadPool.submit(futureTask);
}
for (FutureTask<Integer> task : futureTasks) {
System.out.println(task.get());
}
}
}
package test;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
class Item implements Callable<Integer> {
private int first;
private int second;
public Item(int first, int second) {
this.first = first;
this.second = second;
}
@Override
public Integer call() throws Exception {
return this.first * this.second;
}
}
public class CallBackThread {
public static void main(String[] args) throws InterruptedException, ExecutionException {
//創建了大小為8的線程池
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(8);
List<FutureTask<Integer>> futureTasks = new ArrayList<FutureTask<Integer>>();
for (int i = 0; i < 100; i++) {
FutureTask<Integer> futureTask = new FutureTask<Integer>(new Item(i, (i + 1) * (i - 1)));
futureTasks.add(futureTask);
fixedThreadPool.submit(futureTask);
}
for (FutureTask<Integer> task : futureTasks) {
System.out.println(task.get());
}
}
}
相关文章推荐
- Java中使用Future获取线程异步执行结果的使用
- java 利用Future异步获取多线程任务结果
- Callable+FutureTask实现多线程并获取结果
- JDK5 如何获取所有线程池的结果再继续执行
- java利用线程池(ExecutorService)配合Callable和Future实现执行方法超时的阻断
- java并发:获取线程执行结果(Callable、Future、FutureTask)
- 多线程篇七:通过Callable和Future获取线程池中单个务完成后的结果
- 利用Future异步获取多线程的返回结果
- Java利用future及时获取多线程运行结果
- 利用Future异步获取多线程的返回结果
- java 利用Future异步获取多线程任务结果
- 线程池使用FutureTask时候需要注意的一点事, 获取线程执行结果
- 利用Future异步获取多线程的返回结果
- JDK1.5 获取线程执行结果 Callable Future
- 使用SPRING中的线程池ThreadPoolTaskExecutor并且得到任务执行的结果
- 动态事创建的a标签上利用jq滑过元素执行事件通过ajax获取后台数据根据鼠标位置展示数据内容,鼠标离开消失
- 高德地图远程获取手机的敏感信息可远程命令执行(可以远程利用非webview)
- 获取shell执行结果,不创建实际文件
- 多线程分页获取查询结果,所有线程执行完毕,按顺序合并查询结果
- Spark修炼之道(高级篇)——Spark源码阅读:第九节 Task执行成功时的结果处理