0

我有一个调用线程的 for cylce:

if(toModify[j]==1)
{
    getUpdate(methods_list[j],username, password);
}

getUpdate是一个包含以下内容的方法:

new Thread(new Runnable() {
  public void run() {
      // *** some operations***
  }
}).start();

通过 for循环,我可以同时运行每个循环Thread
但是,如果我希望每个都Thread在前一个停止后才开始,我可以使用以下技巧吗?

if(toModify[j]==1)
{
  int returnValue =  getUpdate(methods_list[j],username, password);
}

并在方法的末尾添加getUpdate此代码行(在运行方法之外):

return 1;

使用上面的代码,每个线程只有在前一个停止的情况下才能启动?还是我错了?

4

2 回答 2

2

但是,如果我希望每个线程仅在前一个线程停止后才启动,我可以使用 > 以下技巧吗?

这意味着您有严格的顺序执行,因此整个代码可以在同一个线程上。如果没有并行性,启动多个线程有什么意义?

于 2012-09-05T10:04:00.093 回答
1

您可以使用RetrantLock

private final ReentrantLock lock = new ReentrantLock();

if(toModify[j]==1)        
  {   
      lock.lock();  // block until condition holds
 try {
   getUpdate(methods_list[j],username, password);         
 } finally {
   lock.unlock()
 }

} 

您还需要在从 getUpdate() 方法启动的线程上调用 join()。

Thread thread = new Thread(new Runnable() { 
        public void run() { 
        // *** some operations*** 
        } 
        }); 
    thread.start();
    thread.join();
于 2012-09-05T09:46:09.510 回答