线程没有同时运行

时间:2013-10-16 10:47:53

标签: java multithreading

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

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&s,然后是100 1&amp; s分机。这整个代码大约需要30秒才能执行,因此它们应至少在某种程度上并行运行。我究竟做错了什么?

2 个答案:

答案 0 :(得分:5)

您的问题是关于调用run方法而不是启动线程。

更改

a.run();

a.start();

当您调用run方法时,它会在不启动预定调用的情况下执行运行而不启动线程进程。

为了引导jvm安排你的线程,你必须使用start方法。

答案 1 :(得分:2)

// number of running ants循环中,将a.run();替换为a.start();