我为基于蚂蚁的寻路创建了以下类(我知道可怕的想法,但仍然)......
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秒才能执行,因此它们应至少在某种程度上并行运行。我究竟做错了什么?
答案 0 :(得分:5)
您的问题是关于调用run
方法而不是启动线程。
更改
a.run();
到
a.start();
当您调用run方法时,它会在不启动预定调用的情况下执行运行而不启动线程进程。
为了引导jvm安排你的线程,你必须使用start方法。
答案 1 :(得分:2)
在// number of running ants
循环中,将a.run();
替换为a.start();