为什么我的线程在完成后不会停止运行?

时间:2016-04-20 01:31:42

标签: java multithreading oop object thread-safety

我有一个程序应该在不同的数组中对不同的字符串进行排序。程序本身几乎可以工作,但程序的某个部分不会停止运行。在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();
    }
  }
}

不确定通知是否正确。

0 个答案:

没有答案