iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么在Java中对多线程进行排序
  • 496
分享到

怎么在Java中对多线程进行排序

2023-06-14 17:06:41 496人浏览 八月长安
摘要

怎么在Java中对多线程进行排序?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向

怎么在Java中对多线程进行排序?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Java的特点有哪些

Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。2.Java具有简单性、面向对象、分布式安全性、平台独立与可移植性、动态性等特点。3.使用Java可以编写桌面应用程序、WEB应用程序、分布式系统和嵌入式系统应用程序等。

1.先试一下我们不用多线程的情况,以快速排序为例

package advance1; import java.util.Arrays; public class JavaDemo {     public static int[] arr;     public static void main(String[] args) {        //随机生成数值        arr = new int[100];        for (int i = 0; i < arr.length; i++) {            arr[i] = (int) (Math.random() * 1000);        }        new JavaDemo().doSort(0, arr.length - 1);        for (int element : arr) {            System.out.println(element);        }    }     public void doSort(int low, int high) {        if (low < high) {            int index = quickSort(low, high);//实际的排序流程            doSort(low, index - 1);            doSort(index + 1, high);        }    }     public int quickSort(int i, int j) {        int key = arr[i];//基准值        while (i < j) {            //找出第一个右边要交换的            while (i < j && arr[j] >= key) j--;            if (i < j) arr[i] = arr[j];            //找出第一个左边要交换的            while (i < j && arr[i] <= key) i++;            if (i < j) arr[j] = arr[i];        }        // i== j的情况        arr[i] = key;        return i;    }}

2.数据分段

//根据我们设立的线程数来分段for (int i = 0; i < threadNum; i++) {    int[] temp = Arrays.copyOfRange(arr, i * arr.length / threadNum,        (i + 1) * arr.length / threadNum);    //theadNum就是线程数}快排线程:采用Callable接口,可以有返回值package advance1; import java.util.concurrent.Callable;import java.util.concurrent.CountDownLatch; //快排多线程public class sortThread implements Callable<int[]> {     private int[] arr;    private int low;    private int high;    private CountDownLatch count;     public sortThread(int[] arr, int low, int high, CountDownLatch count) {        this.arr = arr;        this.low = low;        this.high = high;        this.count = count;    }     public int[] call() throws Exception {        System.out.println("线程 " + Thread.currentThread().getName() + " 开始");        doSort(low, high);        int[] res = new int[high - low + 1];        int index = 0;        for (int i = low; i < high + 1; i++) {            res[index++] = arr[i];        }        try {            return arr;        } finally {            count.countDown();            System.out.println("线程 " + Thread.currentThread().getName() + " 结束");        }    }     public void doSort(int low, int high) {        if (low < high) {            int index = quickSort(low, high);//实际的排序流程            doSort(low, index - 1);            doSort(index + 1, high);        }    }     public int quickSort(int i, int j) {        int key = arr[i];//基准值        while (i < j) {            //找出第一个右边要交换的            while (i < j && arr[j] >= key) j--;            if (i < j) arr[i] = arr[j];            //找出第一个左边要交换的            while (i < j && arr[i] <= key) i++;            if (i < j) arr[j] = arr[i];        }        // i== j的情况        arr[i] = key;        return i;    }}

3.创建多线程,使用CountDownLatch保证前面都完成后再对数据段合并

try {    CountDownLatch count = new CountDownLatch(threadNum);    for (int i = 0; i < threadNum; i++) {        int[] temp = Arrays.copyOfRange(arr, i * arr.length / threadNum, (i + 1) * arr.length / threadNum);        Future<int[]> future = pool.submit(new sortThread(temp, 0,                        temp.length - 1, count));        res[i] = future.get();    }        count.await();    //这里排序亦可使用多线程    int[] m1 = merge(res[0], res[1]);    int[] m2 = merge(res[2], res[3]);    arr = merge(m1, m2);} catch (Exception e) {    e.printStackTrace();}

看完上述内容,你们掌握怎么在Java中对多线程进行排序的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 怎么在Java中对多线程进行排序

本文链接: https://www.lsjlt.com/news/274005.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在Java中对多线程进行排序
    怎么在Java中对多线程进行排序?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向...
    99+
    2023-06-14
  • 怎么在java中对Sorted进行排序
    这篇文章给大家介绍怎么在java中对Sorted进行排序,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queue队列:有序,可重...
    99+
    2023-06-14
  • 怎么在java中对数组进行排序
    这期内容当中小编将会给大家带来有关怎么在java中对数组进行排序,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统...
    99+
    2023-06-14
  • 怎么在java中对集合进行排序
    这篇文章将为大家详细讲解有关怎么在java中对集合进行排序,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于...
    99+
    2023-06-14
  • 怎么在Java中实现多线程排序
    这期内容当中小编将会给大家带来有关怎么在Java中实现多线程排序,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2...
    99+
    2023-06-14
  • java怎么对list进行排序
    Java中可以使用Collections.sort()方法对List进行排序。具体步骤如下:1. 导入java.util包中的Col...
    99+
    2023-09-14
    java
  • 怎么在python中对series进行排序
    这篇文章将为大家详细讲解有关怎么在python中对series进行排序,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Python主要用来做什么Python主要应用于:1、Web开发;2、数据...
    99+
    2023-06-14
  • Java项目中怎么对Map进行排序
    这篇文章将为大家详细讲解有关Java项目中怎么对Map进行排序,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 Java Map的排序实例详解要对Map中的key-value键值对进...
    99+
    2023-05-31
    java map 进行排序
  • 怎么在python中对元组进行排序
    本篇文章为大家展示了怎么在python中对元组进行排序,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(...
    99+
    2023-06-14
  • 怎么在Spring boot中对多线程进行配置
    这篇文章给大家介绍怎么在Spring boot中对多线程进行配置,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。配置线程配置类package test;import java.util.concurr...
    99+
    2023-05-30
    springboot 多线程
  • 怎么在java中利用多线程执行多个程序
    这期内容当中小编将会给大家带来有关怎么在java中利用多线程执行多个程序,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于...
    99+
    2023-06-14
  • java中怎么对指令进行重新排序
    本篇文章给大家分享的是有关java中怎么对指令进行重新排序,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。指令重排序是个比较复杂、觉得有些不可思议的问题,同样是先以例子开头(建议...
    99+
    2023-05-31
    java ava
  • 怎么在Shell中对字符串进行排序
    怎么在Shell中对字符串进行排序?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。【方法一】按ASCII正向排序备注:1) tr将子字符串中的空白转换为换行符,再...
    99+
    2023-06-09
  • 怎么在linux中对awk数组进行排序
    怎么在linux中对awk数组进行排序?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。代码如下:[chengmo@localhost ~]$ awk 'B...
    99+
    2023-06-13
  • Java Stream流对多个字段进行排序
    谈起Java 8,不少熟悉它的人,都会知道有一个对我们帮助很大的新特性,没错,就是我们在项目中经常用到的stream,它对我们处理数据的过程中提供了很多的便利,而这边文章主要讲述stream的便利之一...
    99+
    2023-09-03
    java stream流对多字段进行排序
  • JavaScript中怎么对多维数组多键值进行排序
    JavaScript中怎么对多维数组多键值进行排序,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JavaScript实现多维数...
    99+
    2024-04-02
  • 怎么在Java中对TreeSet进行自定义类型的排序
    怎么在Java中对TreeSet进行自定义类型的排序?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java可以用来干什么Java主要应用于:1. web开发;2. Androi...
    99+
    2023-06-06
  • java中多线程怎么进行通信
    今天就跟大家聊聊有关java中多线程怎么进行通信,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、概要线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线...
    99+
    2023-05-31
    java 多线程通信 ava
  • 对多维切片进行排序
    Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《对多维切片进行排序》带大家来了解一下##content_title##,希望对大家的知...
    99+
    2024-04-04
  • Java 程序对数组元素进行降序排序
    对给定的数组进行降序排序,即将元素从大到小排列。 例子: 输入:数组 = {2, 6, 23, 98, 24, 35, 78} 输出: [98, 78, 35, 24, 23, 6, 2] 输入:数组...
    99+
    2023-10-10
    java 排序算法 算法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作