我有一个学校作业,我将在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 ***");
}
答案 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()
添加支票。如果f
和g
中只有一个是null
,您可能需要将其重新放入监视器(只是在这里猜测)。