1
我想执行下面的代码,其中四个线程正在运行。Groovy多任务
每个线程都试图将一个字符添加到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
仅供参考......静态def mylist = []中的'def作为CopyOnWriteArrayList'是多余的。 –
它解决了我的问题谢谢饶。 –
很高兴它帮助。您可能会赞赏地投票。 – Rao