Java利用Callable和Future进行并行搜索
2017-05-09 18:04
204 查看
Java利用Callable和Future进行并行搜索
public class Search { static int[] array = new int[1000000]; /*线程数量*/ static int Thread_num = 100; /*返回目标下标*/ static AtomicInteger result = new AtomicInteger(-1); /*线程池*/ static ExecutorService pool = Executors.newCachedThreadPool(); /*搜索函数*/ public static int search(int value,int begin,int end) { int i=0; for( i=begin;i<end;i++) { /*如果结果已经有了,就进行返回*/ if (result.get()>=0) { return result.get(); } if (array[i]==value) { /*结果不能赋予也进行返回,说明其它线程已经找到了*/ if (!result.compareAndSet(-1,i)) { return result.get(); } return i; } } return -1; } /*搜索的线程*/ public static class searchTask implements Callable<Integer>{ int begin,end,value; public searchTask(int value,int begin,int end) { this.begin=begin; this.end=end; this.value=value; } @Override public Integer call() throws Exception { int re = search(value, begin, end); return re; } } /*利用线程池进行并行搜索*/ public static void pSearch(int value) throws InterruptedException, ExecutionException { for(int i=0;i<1000000;i++) { array[i] = i; } int size = array.length/2+1; List<Future<Integer>> re = new ArrayList<>(); for(int i=0;i<array.length;i+=size) { int end = i+size; if (end>=array.length) { end=array.length; } re.add(pool.submit(new searchTask(value, i, end))); } for(Future<Integer> fu:re) { if (fu.get()>=0) { System.out.println(fu.get()); } } } public static void main(String[] args) throws InterruptedException, ExecutionException { long start = System.currentTimeMillis(); Search search = new Search(); search.pSearch(999999); System.out.println(System.currentTimeMillis()-start); } }
相关文章推荐
- Java利用Callable、Future进行并行计算求和
- 浅谈在Java中使用Callable、Future进行并行编程
- Java中利用Future和callable接口监测异步线程的理解
- java利用线程池(ExecutorService)配合Callable和Future实现执行方法超时的阻断
- 利用Socket进行Java网络编程
- 利用jmap和heapAnalyzer对java进程进行内存使用率分析
- 利用Socket进行Java网络编程
- 利用JDK1.5的工具对远程的Java应用程序进行监测(摘录)
- android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】
- 利用Java进行网络数据包捕捉|《软苑》56期Top Tips
- 利用Eclipse对MAT进行分析解决JAVA内存问题
- 【转】 利用 Java dump 进行 JVM 故障诊断
- 利用 Java dump 进行 JVM 故障诊断
- 利用JAVA进行DES数据加密
- 利用继承进行JAVA的代码重用
- 利用Java技术进行XML编程(续)
- (Step one)利用JAVA进行XML编程
- Callable 和 Future ---core java 读书笔记
- Android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】
- 利用commons-math-1.1进行java数值计算