2

我为基于蚂蚁的寻路创建了以下类(我知道可怕的想法,但仍然)......

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 分机组成。整个代码执行大约需要 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 回答