带螺纹的冒泡排序

时间:2012-05-15 13:33:17

标签: java multithreading sorting synchronized

我有一个学校作业,我将在Java中使用线程对长名单进行排序。没有关注排序算法的速度,而是用于理解线程以及线程如何影响排序速度的分配。

我觉得我走在正确的道路上,但代码/线程弄乱了显示器,我已经尝试了一段时间来找到问题,对我来说问题似乎在class SortThreads {{1 }} 方法。大家可以给我一些提示或提示吗?

run()

输出:

public void run() {

    while (monitor.getSize() > 1) {
        System.out.println("Number of array in list to be sorted: "
                + monitor.getSize());

        String[] f = monitor.getRandom();
        String[] g = monitor.getRandom();

        monitor.add(descSort(f, g));
    }

    System.out.println("*** THREAD DEAD ***");

}

1 个答案:

答案 0 :(得分:1)

您(可能)的一个问题是此部分不是原子的:

while (monitor.getSize() > 1) {
    System.out.println("Number of array in list to be sorted: "
            + monitor.getSize());

    String[] f = monitor.getRandom();
    String[] g = monitor.getRandom();

    monitor.add(descSort(f, g));
}

通常情况下,如果您使用任何线程,则调用monitor.getSize()monitor.getRandom()之间的大小很可能实际发生了变化。所以我猜其中一个getRandom调用(或两者)都返回null,触发NullPointerException

您可以在致电null之前为descSort()添加支票。如果fg中只有一个是null,您可能需要将其重新放入监视器(只是在这里猜测)。