[英]Using Multihreading with Threshold to Sort an Array
这是我第一次发布问题。 所以,请 go 对我放心。 :D
我是一名学生,目前正在学习多线程。
我的任务是通过将数组分成相等的两半并为每一半启动一个线程来确定数组的排序,每个线程负责对分配给它的数字进行排序。
该线程正在查看需要对多少数字进行排序。 如果这超过某个阈值,线程将创建 2 个新线程,每个线程对列表的一半进行排序。 当这些线程完成后,线程将再次将两个(排序的)arrays 合并在一起。 这会创建一个活动线程的“树”。
不会“外包”其工作的线程再次使用冒泡排序对 arrays 进行排序
这是我的多线程 class 代码:
public class MultiThreading implements Runnable { private int[] wholeNumbers; private int threshold; public int[] getWholeNumbers() { return wholeNumbers; } public MultiThreading(int[] wholeNumbers, int threshold) { this.wholeNumbers = wholeNumbers; this.threshold = threshold; } @Override public void run() { try { sortArray(wholeNumbers, threshold); } catch (InterruptedException e) { throw new RuntimeException(e); } } public int[] sortArray(int[] wholeNumbers, int threshold) throws InterruptedException { if (wholeNumbers.length < threshold) { Sort.bubbleSort(wholeNumbers); } else { int[] left = Arrays.copyOfRange(wholeNumbers, 0, wholeNumbers.length / 2); int[] right = Arrays.copyOfRange(wholeNumbers, wholeNumbers.length / 2, wholeNumbers.length); Thread leftThread = new Thread(new MultiThreading(left, threshold)); Thread rightThread = new Thread(new MultiThreading(right, threshold)); leftThread.start(); rightThread.start(); leftThread.join(); rightThread.join(); wholeNumbers = Sort.merge(left,right); } return wholeNumbers; } }
这就是我初始化 class 的方式(这里我尝试更改已经定义的 WholeNumbers 数组):
MultiThreading multiThreading = new MultiThreading(wholeNumbers, threshold); Thread thread = new Thread(multiThreading); thread.start(); thread.join(); wholeNumbers = multiThreading.getWholeNumbers();
我已经获得了排序和合并方法,所以它们工作得很好。
我的问题是它不返回排序后的数组。 那么,我该如何解决呢?
如果我能得到一些指导,那就太好了。 提前致谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.