java - 线程不同时运行

标签 java multithreading

我为基于 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 的扩展。整个代码大约需要 30 秒才能执行,因此它们至少应该在某种程度上并行运行。我究竟做错了什么?

最佳答案

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

改变

a.run();

a.start();
<小时/>

当您调用 run 方法时,它会执行 run,而不启动线程进程,也没有计划的调用。

为了让jvm调度你的线程,你必须使用start方法。

关于java - 线程不同时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19401454/

相关文章:

java - 根据在 Spinner 中选择的值设置 imageView src

multithreading - 如何处理laravel作业的多个线程?

java - 多线程斐波那契

c - 这段关于线程的 C 代码应该如何工作?

java - 如何执行并发安全的映射对象操作?

java - java 开头带有 default 子句的 switch 语句

java - 学习 XML 和 Java 的书

java - 公共(public) https 网站上的 jsse handshake_failure

java - Java中基于属性的压缩ArrayList

multithreading - 管理 TPL 队列