java8并行流

并行流

parallelStream.forEach()

Java8中新增了并行流,可以使用多线程进行并行操作,提高效率
但是因为是多线程的 输出顺序不一定是按照顺序的

    @Test
public void t1(){
//        java8新特性
        List<Integer> list=new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,10));
        list
        .parallelStream()    //获得并行流
        .forEach(i->System.out.println(Thread.currentThread().getName()+" -> "+i));
//      ForkJoinPool.commonPool-worker-3 -> 2
//      ForkJoinPool.commonPool-worker-3 -> 8
//      ForkJoinPool.commonPool-worker-3 -> 10
//      ForkJoinPool.commonPool-worker-7 -> 4
//      ForkJoinPool.commonPool-worker-4 -> 6
//      main -> 7
//      ForkJoinPool.commonPool-worker-6 -> 1
//      ForkJoinPool.commonPool-worker-2 -> 9
//      ForkJoinPool.commonPool-worker-1 -> 3
//      ForkJoinPool.commonPool-worker-5 -> 5
        }

parallelStream().forEachOrdered()

按顺序输出

 @Test
public void t2(){
        List<Integer> list=new ArrayList<>(Arrays.asList(1,2,3,4,5));
        list
        .parallelStream()    //获得并行流
        .forEachOrdered(System.out::println);   //保证顺序
//        1,2,3,4,5
        }

Arrays 中用多线程进行排序

    @Test
public void t3(){
        int[]arr=new int[]{1,4,5,2,9,3,6,0};
        Arrays.parallelSort(arr);   //使用多线程进行并行排序,效率更高
        System.out.println(Arrays.toString(arr));
        }

多线程的问题
具体看juc并发编程

    //    并发操作集合 导致线程不安全 
@Test
public void t4()throws InterruptedException{
        List<Integer> list=new ArrayList<>();
        new Thread(()->{
        for(int i=0;i< 1000;i++){
        list.add(i);   //两个线程同时操作集合类进行插入操作
        }
        }).start();
        new Thread(()->{
        for(int i=1000;i< 2000;i++){
        list.add(i);
        }
        }).start();
        Thread.sleep(2000);
        System.out.println(list.size());
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值