Ich versuche, den folgenden Code auszuführen, in dem vier Threads ausgeführt werden.Groovy Multitasking
Jeder Thread versucht, das eine Zeichen zu mylist
hinzuzufügen. Nach jedem Lauf sollten 4 Elemente in beliebiger Reihenfolge in der Liste stehen. Aber, wenn dieser Code in jenkin
Konsole ausgeführt wird, erhalten jedes Mal andere Anzahl von Elementen. d.h. [A, B, Null], [C,null,D],[A,B,C,D]
.
Es scheint, als ob ein Synchronisationsproblem aufgrund von Multitasking. Ich habe versucht, Methode hinzufügen Element zur Liste hinzufügen mit synchronize
Schlüsselwort, aber das hat nicht geholfen.
class Globals {
static def mylist=[]
}
class TestMultiThreadExecution implements Runnable
{
String name;
public TestMultiThreadExecution(String name) {
this.name = name;
}
//@Override
public void run() {
println "${name} Step 1"
Globals.mylist.push("${name}")
}
}
Globals.mylist.clear()
Thread thread1 = new Thread(new TestMultiThreadExecution("A"));
thread1.start();
Thread thread2 = new Thread(new TestMultiThreadExecution("B"));
thread2.start();
Thread thread3 = new Thread(new TestMultiThreadExecution("C"));
thread3.start();
Thread thread4 = new Thread(new TestMultiThreadExecution("D"));
thread4.start();
thread1.join();
thread2.join();
thread3.join();
thread4.join();
println Globals.mylist
FYI ... Die 'def' in' static def mylist = [] als CopyOnWriteArrayList' ist überflüssig. –
Es hat mein Problem gelöst Danke Rao. –
Froh, dass es geholfen hat. Sie können abstimmen. – Rao