Я пытаюсь выполнить приведенный ниже код, в котором работают четыре потока.Groovy multi tasking
Каждый поток пытается добавить один символ в mylist
. После каждого прогона в списке должно быть 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' в' static def mylist = [] как CopyOnWriteArrayList' является излишним. –
Его решена моя проблема. Спасибо Рао. –
Рад, что это помогло. Вы можете голосовать в знак признательности. – Rao