package Search;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.Future;import java.util.concurrent.atomic.AtomicInteger;public class SearchMain {static ExecutorService pool = Executors.newCachedThreadPool();static final int THREAD_NUM = 2;// 存放结果,保存符合条件元素的下标。static AtomicInteger result = new AtomicInteger(-1);static int[] arr = new int[] { 1, 32, 33, 56, 87, 43 };public static void main(String[] args) throws InterruptedException, ExecutionException {System.out.println(arr.length);Thread.sleep(3000);System.out.println(pSearch(1));}/*** 并行查找函数 根据数据线程数量对arr数组进行划分,并建立对应的任务提交给线程池处理*/public static int pSearch(int searchValue) throws InterruptedException, ExecutionException {int subArrSize = arr.length / THREAD_NUM + 1;List<Future<Integer>> re = new ArrayList<Future<Integer>>();for (int i = 0; i < arr.length; i += subArrSize) {int end = i + subArrSize;if (end >= arr.length) {end = arr.length;}re.add(pool.submit(new SearchTask(i, end, searchValue)));}for (Future<Integer> future : re) {if (future.get() >= 0) {return future.get();}}return -1;}/*** 并发搜索 要求每个线程查找arr中的一段*/public static int search(int searchValue, int startPos, int endPos) {int i = 0;for (i = startPos; i < endPos; i++) {if (result.get() >= 0) {return result.get();}if (arr[i] == searchValue) {// 如果设置失败,表示其他线程已经先找到了if (!result.compareAndSet(-1, i)) {System.out.println("如果设置失败,表示其他线程已经先找到了");return result.get();}System.out.println("jjy");return i;}}System.out.println("lxf");return -1;}public static class SearchTask implements Callable<Integer> {int begin, end, searchValue;@Overridepublic Integer call() throws Exception {int re = search(searchValue, begin, end);return re;}public SearchTask(int begin, int end, int searchValue) {this.begin = begin;this.end = end;this.searchValue = searchValue;}}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。