多次调用线程

时间:2016-11-24 14:26:13

标签: java multithreading

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

我的线程运行代码看起来像

    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。

1 个答案:

答案 0 :(得分:0)

猜猜:你把那张支票

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

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

所以,如果检查确实有意义;当线程 null 时,你必须防止离开那个循环级别。