2

何かを処理するクラスがあります。このクラスの多数のインスタンスを並行して実行しようとしています。

ただし、TaskManager.startAll()を呼び出したときにr.go()、これにより r が独自のスレッドで実行されるのか、それともメイン スレッド内で実行されるのかはわかりません。

私が得ている合計実行時間は非常に長いようで、最適化を試みたにもかかわらず、何も効果がないようです。また、Netbeans のプロジェクトでプロファイラーを実行すると、すべてのスレッドがスリープ状態として表示されます。それで、私が何か間違ったことをしているかどうか知りたいですか?

これはクラスの構造です:

public class TaskRunner implements Runnable {
   private boolean isRunning = false;
   public void run() {
        while(true) {
            while (! running) {
                try {
                    Thread.sleep(1);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            process();
        }
    }

    public void go() {
       isRunning = true;
    }

    public void stop() {
       isRunning = false;
    }

    private void process() {
       //Do some number crunching and processing here
    }
}

これらがどのように実行/管理されているかは次のとおりです。

public class TaskManager {
     private ArrayList<TaskRunner> runners = new ArrayList<>();
     public TaskManager() {
        for (int i = 0; i < 10; i++) {
            TaskRunner r = new TaskRunner();
            new Thread(r).start();
            runners.add(r);
        }
     }

     public void startAll() {
        for (TaskRunner r : runners) {
           r.go();
         }
     }
}
4

3 に答える 3