标签:java多线程future和callab 线程 多线程
一,描述
?在多线程下编程的时候,大家可能会遇到一种需求,就是我想在我开启的线程都结束时,同时获取每个线程中返回的数据然后再做统一处理,在这样的需求下,Future与Callable的组合就派上了很大的用场。也有人会说,我可以使用同步来完成这个需求啊,一般情况下确实可以。但是在一种特殊情况下就不行了:
?想象,你开启了多个线程同步计算一些数据,但是大家都知道,线程是会争用资源的,也就是说,你开启多个线程来同步计算数据时,其实线程之间的计算顺序是不可空的,当然除非你非很大周折去处理也不无可能,在这种情况下,Future和Callable的组合就是不二之选了。
?
二,例子
这两个类的例子其实很简单,主要就看自己在实际运用中能不能找到他们的用武之地了,上代码:
package test;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class FetureCallableTest {
private static ExecutorService service = Executors.newFixedThreadPool(100);
private static int count = 1;
public static void main(String[] args) throws InterruptedException, ExecutionException {
int sum = 0;
for(int i = 0; i < 100; i++) {
Future<Integer> future = service.submit(new Callable<Integer>(){
@Override
public Integer call() throws Exception {
System.out.println(Thread.currentThread().getName());
return ++count;
}
});
int f = future.get();
sum += f;
System.out.println("future is " + f);
}
System.out.println("sum is " + sum);
service.shutdownNow();
}
}
java多线程Future和Callable类的解释与使用,布布扣,bubuko.com
标签:java多线程future和callab 线程 多线程
原文地址:http://blog.csdn.net/startupmount/article/details/37602865