Java基于fork/koin类实现并发排序
2020-03-11 17:50
453 查看
概述
主要谈一谈 Java使用fork/koin类 实现的并发排序 以及对于Stream流的支持的splitetor
- mismatch() -> 寻找两个数组 第一次出现数据不一致的下标
- parallelPrefix() -> 对数组进行,累加求和
- parallelSetAll() -> 对数组进行置数,
- parallelSort() -> 并行排序
- Spliterator() -> 对数组进行切分(切分后的数据为所有的数据的组合)
奇数 x/2+1 11->6
偶数 x/2 10 ==>5
public class Use_Arrays { @Test public void test_mismatch() { int []x =new int[] {1,2,3,4}; int []y =new int[] {1,3,4,5}; int index = Arrays.mismatch(x, y); System.out.println(index); } @Test public void test_parallelPrefix() { int []x =new int[] {1,2,3,4}; //f2=f1+f2 //f3=f2+f3 Arrays.parallelPrefix(x, (k,v)->k+v); System.out.println(Arrays.toString(x)); // 实现1-100累加求和 int []y =new int[100]; Arrays.parallelSetAll(y, k->k=1); Arrays.parallelPrefix(y, (k,v)->k+v); System.out.println(Arrays.toString(y)); } @Test public void test_parallelSetAll() { int []x =new int[100]; x[0]=1; Arrays.parallelSetAll(x, y->y+1); System.out.println(Arrays.toString(x)); } @Test public void test_parallSort() { IntStream stream = new Random().ints(0, 1000).limit(1000); int[] array = stream.toArray(); System.out.println(Arrays.toString(array)); Arrays.parallelSort(array); System.out.println(Arrays.toString(array)); } @Test public void test_spliterator() { int []x =new int[11]; Arrays.parallelSetAll(x, k->k+=1); System.out.println(Arrays.toString(x)); Spliterator.OfInt int0_100 = Arrays.spliterator(x); int [] y=new int[(int) int0_100.estimateSize()]; int i=0; System.out.println(int0_100.estimateSize()); System.out.println(int0_100.characteristics()); System.out.println(int0_100.getExactSizeIfKnown()); //spliterator.forEachRemaining((int k)->System.out.println(k)); OfInt int1_50 = int0_100.trySplit(); OfInt int2_25 = int1_50.trySplit(); int0_100.forEachRemaining((int k)->System.out.print(k+" ")); System.out.println(); int1_50.forEachRemaining((int k)->System.out.print(k+" ")); System.out.println(); int2_25.forEachRemaining((int k)->System.out.print(k+" ")); } }
2:使用Spliterator实现并行输出
@Test public void definied_Sort() { IntStream stream = new Random().ints(0, 100).limit(100); int[] array = stream.toArray(); Arrays.sort(array); final int NUMS=3;// 切分的次数 ExecutorService thread_pool = Executors.newFixedThreadPool(10); Spliterator.OfInt cut1 = Arrays.spliterator(array); while(!thread_pool.isTerminated()) { thread_pool.submit(()->{ OfInt split = cut1.trySplit(); thread_pool.shutdown(); split.forEachRemaining((int k)->System.out.print(k+" ")); System.out.println(); }); } }
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- 基于JAVA实现的排序算法总结
- Java实现拓扑排序:基于邻接矩阵,针对有向无环图
- 基于redis的高并发秒杀的JAVA-DEMO实现!
- JAVA并发-基于AQS实现自己的显示锁
- 基于redis的高并发秒杀的JAVA-DEMO实现!
- 如何基于Java实现对象List排序
- 【java并发】基于JUC CAS原理,自己实现简单独占锁
- 基于redis的高并发秒杀的JAVA-DEMO实现!
- 基于redis的高并发秒杀的JAVA-DEMO实现!
- 基于Java实现与MySQL数据库的连接,并对数据库中的表进行操作(排序)
- 数据结构书中基于整数的简单排序Java实现,巩固一下基础
- Java基于二叉查找树实现排序功能示例
- java基于AbstractQueuedSynchronizer实现资源共享锁,限制并发线程数目
- 基于redis的高并发秒杀的JAVA-DEMO实现!
- 基于桶式排序的基数排序Java实现
- 基于redis的高并发秒杀的JAVA-DEMO实现!
- Java 并发编程-再谈 AbstractQueuedSynchronizer 3 :基于 AbstractQueuedSynchronizer 的并发类实现
- Java 并发编程-再谈 AbstractQueuedSynchronizer 2:共享模式与基于 Condition 的等待 / 通知机制实现
- 基于海量数据的外部排序java实现(快速+归并)
- Java实现基于桶式排序思想和计数排序思想实现的基数排序