funktioniert Ich mache smth wie:Groovy/SoapUI: Loop Innengewinde nicht
Iterator<String> iterator = requestList.iterator()
(1..threadCount).each {
Thread.start {
while(iterator.hasNext()) {
log.info iterator.next()
Thread.sleep(50)
}
}
}
Da threadCount = 10
und requestList is ~115
erwarte ich, dass alle Themen zur Ausgabe die ganze Liste, jedes Mal Iterator zu fragen, ihnen zu geben Nächster.
Allerdings habe ich kaum bekommen sogar 10 Protokolle, in der Regel 8.
Alles in SoapUI groovy Scriptschritt durchgeführt wird, statt log.info Ich habe nämlich eine REST-Anfrage mit der Nummer N.
auslösendenWas mache ich falsch mit diesen Threads?
UPD
Okay, hat wie diese smth dumm, zu testen (und vermeiden ein Array):
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
}
}
Und ich habe jetzt keine Ausgabe an alle oder ein Protokoll höchstens, obwohl ich 12 erwarte. Wie erstelle ich Threads, die Daten gleichzeitig ausgeben?
NOCH MEHR
def threadCount=10
(0..threadCount).each { n ->
Thread.start {
(1..10).each {
log.info "thread"+n+" says| "+it
}
}
}
Ausgang ist:
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
und nichts mehr. Wieder was ist los mit mir oder groovy? (hoffe, groovy ist in Ordnung)
hinzuzufügen, dies auch zu Race-Bedingung und ein Datum Rennen führen wird, weil die Iteratorobjekt von allen Threads ohne Synchronisation gemeinsam genutzt wird. Die Ausgabe ist also unvorhersehbar. – Madhusudhan
Sie sind auf eine Thread-Sicherheitsfrage gestoßen. Eine verwandte Frage ist diese: http://stackoverflow.com/questions/5847939/is-list-iterator-thread-safe – Danilo
Über Ihre Aktualisierung, definieren Sie die Arrays richtig, um die Ausgabe zu sehen, die Sie erwarten: def array1 = 0. .5. In der for-Schleife sollten Sie Integer verwenden, aber String funktioniert auch. – Danilo