私は4つのスレッドが実行されている以下のコードを実行しようとしています。Groovyマルチタスク
各スレッドはmylist
に1文字を追加しようとしています。各実行の後、リストには4つの要素が任意の順序でなければなりません。しかし、このコードがjenkin
コンソールで実行されているときには、それぞれ異なる時間数の要素が取得されます。すなわち、[A, B, Null], [C,null,D],[A,B,C,D]
。
マルチタスキングのためにいくつかの同期の問題があるようです。私はsynchronize
キーワードを使用してリストに要素を追加するメソッドを追加しようとしましたが、それは助けになりませんでした。
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 ...静的なdef mylist = []としてのCopyOnWriteArrayListの 'def'は余分です。 –
それは私の問題を解決したラオに感謝します。 –
助けてくれてうれしい。感謝の意を表することができます。 – Rao