我有一个程序应该在不同的数组中对不同的字符串进行排序。程序本身几乎可以工作,但程序的某个部分不会停止运行。在run方法中,线程在排序内容后不会停止运行。
例如,如果我创建4个线程,则应该对每个10个字的数组进行排序。在第4个数组和第40个字运行后,编程将继续运行。
public void run(){
try{
sortArray();
while(monitor.tabStorrelse1() == uTabell.length || monitor.tabStorrelse2() == uTabell.length){
if(monitor.returTab1() != null && monitor.returTab2() != null){
String[] tab1 = monitor.returTab1();
String[] tab2 = monitor.returTab2();
if(tab1 != null && tab2 != null){
monitor.tomTab1(); //method that clears arrays
monitor.tomTab2();
}
String[] totalTab = new String[tab1.length + tab2.length];
int b = 0;
int c = 0;
int d = 0;
while(b < tab1.length && c < tab2.length ){ //this merges 2 sorted arrays, into one sorted array
if(tab1[b].compareTo(tab2[c]) < 0){
totalTab[d] = tab1[b];
b++;
} else {
totalTab[d] = tab2[c];
c++;
}
d++;
}
while(b < tab1.length){
totalTab[d] = tab1[b];
b++;
d++;
}
while(c < tab2.length) {
totalTab[d] = tab2[c];
c++;
d++;
}
monitor.putIn(totalTab);
}
}
}catch(InterruptedException e){
e.printStackTrace();
}
}
sortArray方法只是对它进行排序,我相信问题在于运行,或者我的程序如何执行某些方法。
public synchronized void putIn(String[] tabellFraTraad){
if(tabell1 == null && tabell2 == null){
tabell1 = tabellFraTraad;
notify();
}
else if(tabell1 != null && tabell2 == null){
tabell2 = tabellFraTraad;
notify();
}
else if(tabell1 != null && tabell2 != null){
try{
wait();
}catch(InterruptedException err){
err.printStackTrace();
}
}
}
不确定通知是否正确。