Java 启动NewFixedThreadPool分段查找数组内最大值
来源:互联网 发布:hive sql与sql对比 编辑:程序博客网 时间:2024/06/06 09:05
有些时候数据量过大,只使用单线程查找,浪费了多核资源,我们可以使用线程池方式,开启多个线程,将数组分段给不同线程查找最大值,然后对比区域内大值,最终返回最大值。
子线程Callback线程
import java.util.concurrent.Callable;public class FindMaxTask implements Callable<Integer> { private int[] data; private int start; private int end; public FindMaxTask(int[] data, int start, int end) { // TODO Auto-generated constructor stub this.data =data; this.start = start; this.end = end; } @Override public Integer call() throws Exception { // TODO Auto-generated method stub int max = Integer.MIN_VALUE; for (int i = start; i < end; i++) { if (data[i] > max) { max = data[i]; } } return max; }}
主线程使用NewFixedThreadPool:
import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.concurrent.FutureTask;import com.gy.algorithm.FindMaxTask;public class MultithreadMaxFinder { public static int max(int[] data) throws InterruptedException, ExecutionException{ if (data.length == 1) { return data[0]; } else if (data.length == 0) { throw new IllegalArgumentException(); } FindMaxTask task1 = new FindMaxTask(data, 0, data.length/2); FindMaxTask task2 = new FindMaxTask(data, data.length/2, data.length); ExecutorService service = Executors.newFixedThreadPool(2); Future<Integer> future1 = service.submit(task1); Future<Integer> future2 = service.submit(task2); return future1.get() > future2.get() ? future1.get():future2.get(); } public static void main(String[] args) { int[] data = new int[100000000]; for (int i = 0; i < data.length; i++) { data[i] = i; } long st = System.currentTimeMillis(); try { max(data); } catch (InterruptedException | ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } long et = System.currentTimeMillis(); System.out.println("耗时: " + (et - st) + "ms"); }}
阅读全文
0 0
- Java 启动NewFixedThreadPool分段查找数组内最大值
- 数组分段查找
- 查找数组中的最大值
- 数组分段和最大值最小问题
- 数组分段和最大值最小问题
- 数组分段和最大值最小问题
- 递归查找数组中的最大值
- 升序降序数组查找最大值
- java获取数组最大值
- java 数组求最大值
- java 数组中的最大值
- java 标签 查找一个数是否在数组内
- java newFixedThreadPool 报错
- C++查找数组中的最大值和最小值
- 数组中,查找最大值与最小值
- JavaScript 查找数组中最大值与最小值
- Java数组遍历、求最大值、选择排序、冒泡排序、二分查找
- 【Core Java Volume 5】集合算法---查找数组、集合最大值的通用方法
- codeforces 864C
- 4.牛顿法和拟牛顿算法
- THE compile of serveral files
- 浏览器访问常见状态码
- Oracle归档模式下恢复-数据库完全恢复方法实例2
- Java 启动NewFixedThreadPool分段查找数组内最大值
- 在一个栈上调用构造函数 好牛逼呀
- django表单
- 2017年09月23日普级组 看电影
- 关于beautifulsoup的一个bug 由于<!–[if lte IE 6]><![endif]–>无法正常解析标签)
- 隐含对象是什么意思?有哪些隐含对象?
- SpringCloud学习_2(服务消费者)
- iOS11 最新技能更新
- ORACLE 分页SQL