代码之家  ›  专栏  ›  技术社区  ›  pie154

从while循环内部启动线程,会发生什么?

  •  1
  • pie154  · 技术社区  · 15 年前

    我想有一个while循环在每个循环上启动一个线程,

    我使用下面的代码来启动线程,是否需要为每个线程设置一个唯一的标识符,或者因为它是从不同的循环启动的,它是否启动正常,或者它是否会覆盖以前的启动,因为它们使用相同的标识符?

    while(x<y){
    Runnable r = new Rule1("neil", 2, 0);
    new Thread(r).start();
    x++;
    }
    
    3 回复  |  直到 15 年前
        1
  •  6
  •   SLaks    15 年前

    它会很好用的。

    您的线程根本没有任何标识符。
    这个 r 变量是普通(和临时)变量;您正在将其值传递给 Thread 构造函数。

    运行时甚至不知道该变量。

        2
  •  4
  •   Jon Skeet    15 年前

    它将启动多个线程。线程的唯一“唯一标识符”是 Thread.getId() 你不能分配。甚至线程名称也不需要是唯一的。换句话说,这里没有可重用的唯一标识符。

    当然,事实上您正在分配 Thread 在每次迭代中引用同一个变量并不意味着线程最关心。

        3
  •  0
  •   Aaron McIver    15 年前

    虽然您不需要为每个线程创建一个唯一的标识符(框架将负责),但最好的做法是尽可能根据线程所做的工作命名线程,这样当您通过logs/jvisualvm开始调试时,您就知道线程的用途。