2016-04-19 10 views
1

私がやっているなめらかに動作しないの内側のループ次。Groovyの/ SOAPUI:のようにスレッドが

しかし、私はほとんども、通常10のログ、代わりに私が実際に数Nを持つREST要求をトリガする予定log.infoのすべてがSOAPUIグルーヴィーなスクリプトステップ内で行われる8

を取得しない

これらのスレッドで何が問題になっていますか?

オーケー

UPD、テスト(と1つのアレイを使用しないよう)するために、このような愚かななめらかでした:

def array1 = all[0..5] 
def array2 = all[6..11] 


Thread.start{ 

    for(String r: array1) { 
     log.info r 
    } 
} 

Thread.start{ 

    for(String r: array2) { 
     log.info r 
    } 
} 

そして今、私はほとんどまったくまたは1つのログには何も出力を持っていません、私は12を期待しています。 同時にデータを出力するスレッドを作成するにはどうすればよいですか?

EVEN MORE

def threadCount=10 

(0..threadCount).each { n -> 

Thread.start { 

    (1..10).each { 
     log.info "thread"+n+" says| "+it 
    } 
} 
} 

出力は次のとおりです。

thread0 says| 1 
thread3 says| 1 
thread8 says| 1 
thread2 says| 1 
thread1 says| 1 
thread9 says| 1 
thread7 says| 1 
thread5 says| 1 
thread4 says| 1 
thread0 says| 2 

そして、何よりも。もう一度、私やグルーヴィーに何が間違っていますか?

+1

sleepを追加することです。したがって、出力は予測できません。 – Madhusudhan

+0

スレッドセーフの問題が発生しました。関連する質問は次のとおりです。http://stackoverflow.com/questions/5847939/is-list-iterator-thread-safe – Danilo

+0

更新については、期待通りに出力を見るために配列を正しく定義してください:def array1 = 0。 .5。 forループではIntegerを使うべきですが、Stringも同様に動作します。 – Danilo

答えて

0

最後に、問題は、すべてのスレッドが次の番号を取得する前にメインスレッドを終了させることです。

これと一緒に暮らすための簡単な方法は、イテレータオブジェクトがどの同期なしすべてのスレッドで共有されているので、これは同様に競合状態やデータレースにつながる主な方法

関連する問題