我有一个代码,我正在处理多个线程。 一个线程等待执行它所依赖的其他一些线程。
我的线程运行代码看起来像
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次动作。这是循环外的。
我用另一种方法开始这个线程,比如
switch ( element.getKey() ) {
case A
thread = new Thread( action );
thread.setName( threadName );
thread.start();
break;
由于某些原因(我无法弄清楚),该线程运行了三次。
它只在我调用thread.start()方法时运行,还是在其他线程在thread.join()方法中等待此线程时必须执行某些操作?当这个线程在thread.join()中等待时,它不应该执行进一步的操作,对吗?
更新:
抱歉不明白的问题: run()
后面有一个print语句run()的 //打印A. For loop
然后在//执行操作中有另一个print语句 //打印B
A和B都打印3次。 我想到的唯一数字3是因为nameList大小是3。
答案 0 :(得分:0)
猜猜:你把那张支票
if ( thread != null ) {
while ( thread.isAlive() ) {
thread.join();
}
}
进入你的代码;可能是有原因的。如果调用实际返回null,则跳出for循环;然后您将运行以下操作。
所以,如果检查确实有意义;当线程 null 时,你必须防止离开那个循环级别。