我想有一个while循环启动每个循环的线程,从while循环中启动线程,会发生什么情况?
我正在使用以下来启动线程,我是否需要为每个线程有一个唯一的标识符或因为它是从不同的循环启动它会启动吗?或者它会覆盖之前的启动,因为它们使用相同的标识符?
while(x<y){
Runnable r = new Rule1("neil", 2, 0);
new Thread(r).start();
x++;
}
我想有一个while循环启动每个循环的线程,从while循环中启动线程,会发生什么情况?
我正在使用以下来启动线程,我是否需要为每个线程有一个唯一的标识符或因为它是从不同的循环启动它会启动吗?或者它会覆盖之前的启动,因为它们使用相同的标识符?
while(x<y){
Runnable r = new Rule1("neil", 2, 0);
new Thread(r).start();
x++;
}
它会正常工作。
您的主题根本没有任何标识符。
r
变量是一个正常(和临时)变量;您将其值传递给Thread
构造函数。
运行时甚至不知道该变量。
SLaks是正确的回应每个线程没有标识符的问题......他们将被视为匿名(即没有引用到您访问的范围内的线程。 ..)。这意味着每次通过循环时都无法获得对前一个线程实例的引用。 – edwardsmatt 2010-10-21 15:25:53
它会启动多个线程。线程唯一的“唯一标识符”是由Thread.getId()
返回的ID,您无法分配该ID。即使线程名称不需要是唯一的。换句话说,这里没有唯一的标识符被重用。
当然,在每次迭代中将Thread
引用分配给同一个变量的事实并不意味着线程将毫不在意。
线程ID在Java中是唯一的 – 2010-10-21 15:16:06
@Aaron:是的,当然会更新以澄清。 – 2010-10-21 15:17:50
虽然您不需要为每个线程创建唯一的标识符(框架将处理它),但最好的做法是尽可能将您的线程命名为与他们正在做的事情相关的名称,以便在开始调试时通过日志/ jvisualvm你知道线程的目的。
你认为什么地方会出错? – SLaks 2010-10-21 15:12:04
这样的问题你应该先询问后再尝试。如果您感到困惑或者想要对结果进行解释,那没问题,但像“这项工作”这样的问题通过运行和查看可以更好地完成。 – 2010-10-21 15:12:45
此外,没有任何逻辑或不合理的理由期望分享任何东西。他认为将会分享什么,甚至都没有合理的解释。 – SLaks 2010-10-21 15:13:59