gpt4 book ai didi

java - 线程被多次调用

转载 作者:太空宇宙 更新时间:2023-11-04 12:02:16 25 4
gpt4 key购买 nike

我有一个正在处理多个线程的代码。一个线程等待它所依赖的其他一些线程的执行。

我的线程运行代码如下所示

    public void run() {

for ( final String name : nameList ) {
final Thread thread = getThreadByName( name );
if ( thread != null ) {
while ( thread.isAlive() ) {
thread.join();
}
}
}
//perform action
}

几乎没有其他线程等待该线程通过调用 join() 在同一方法(如 run())中完成执行,如图所示。

假设该线程依赖于其他三个线程,并且正在等待它们在 thread.join() 中完成执行。即 nameList 大小为 3 但该线程也执行操作 3 次。这是在 for 循环之外。

我用另一种方法启动这个线程,例如

    switch ( element.getKey() ) {
case A
thread = new Thread( action );
thread.setName( threadName );
thread.start();
break;

由于某种原因(我无法弄清楚),线程运行了三次。

它是只在我调用 thread.start() 方法时运行,还是当其他线程在 thread.join() 方法中等待该线程时它必须执行某些操作?当这个线程在 thread.join() 中等待时,它不应该执行进一步的操作,对吗?

更新:

抱歉,问题不清楚:run() 之后有一个 print 语句

运行()//打印AFor循环

然后在//执行操作中有另一个打印语句//打印B

A和B都打印了3次。我唯一想到的数字 3 是因为 nameList 大小是 3。

最佳答案

猜测:你放了支票

if ( thread != null ) {
while ( thread.isAlive() ) {
thread.join();
}
}

进入你的代码;可能是有原因的。如果该调用实际上返回 null,则您将跳出 for 循环;然后您将运行以下操作。

因此,如果该检查确实有意义;当线程为null时,您必须防止离开该循环级别。

关于java - 线程被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40788858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com