线程没有同时运行

Thi*_*ser 2 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());
        }
    }


}
Run Code Online (Sandbox Code Playgroud)

出于效率的原因,这应该是多线程的,但是当我让它们打印线程数时,我得到一个整齐的小的ordended集100 0's然后100 1的分机.这整个代码大约需要30秒才能执行,因此它们应该至少在某种程度上并行运行.我究竟做错了什么?

Ram*_*oza 5

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

更改

a.run();
Run Code Online (Sandbox Code Playgroud)

a.start();
Run Code Online (Sandbox Code Playgroud)

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

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