2

Ant ベースのパスファインディング用に次のクラスを作成しました (恐ろしい考えは知っていますが、それでも)...

public class main implements Runnable{
    static int[][] maze;
    static int[] targets;
    int treadnumber;
    public main(int i){
        treadnumber=i;
    }
    public static void main(String[] args){

        maze=mazeReader.read();
        colony.createscent(maze);   
        targets =targetReader.read();

        //number of running ants
        for (int i=0; i<4;i++){
            Thread a= new Thread(new main(i));
            a.run();
        }
        System.out.println("test");

        System.out.println("and the winner is:");
        System.out.println(colony.bestroute);
        System.out.println(colony.lengthbest/2);
    }

    public void run() {
        for (int i=0; i<100 ;i++){
            System.out.println(treadnumber);
        maze =mazeReader.read();
        ant a = new ant();
        a.loadmaze(maze.clone());
        a.start(targets.clone());
        }
    }


}

効率上の理由から、これはマルチスレッドで実行する必要がありますが、スレッド番号を出力させると、100 個の 0 の後に 100 個の 1 の ext. このコード全体の実行には約 30 秒かかるため、少なくともある程度並列に実行する必要があります。私は何を間違っていますか?

4

2 に答える 2

5

あなたの問題は、runスレッドを開始する代わりにメソッドを呼び出すことです。

変化する

a.run();

a.start();

run メソッドを呼び出すと、スレッド プロセスを開始せずに、スケジュールされた呼び出しなしで run を実行します。

jvm がスレッドをスケジュールするようにするには、start メソッドを使用する必要があります。

于 2013-10-16T10:49:38.847 に答える
2

// number of running antsループで置き換えa.run();ますa.start();

于 2013-10-16T10:51:03.607 に答える