0

スレッドを呼び出す for サイクルがあります。

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

getUpdate次のようなものを含むメソッドです。

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

サイクルごとに、それぞれを同時に実行できます。 しかし、前のものが停止した後にのみ開始するようにしたい場合は、次のトリックを使用できますか?Thread
Thread

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

メソッドの最後にこのコード行を追加しgetUpdateます (run メソッドの外側):

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 に答える