| public class concurency extends groovy.lang.Script { |
| public static void main(java.lang.String[] args) { |
| new concurency(new groovy.lang.Binding(args)).run(); |
| } |
| |
| public java.lang.Object run() { |
| |
| |
| final java.util.concurrent.atomic.AtomicInteger counter = new java.util.concurrent.atomic.AtomicInteger(); |
| |
| |
| |
| java.lang.Thread th = org.codehaus.groovy.runtime.DefaultGroovyStaticMethods.start(null, new groovy.lang.Closure<java.lang.Void>(this, this) { |
| public void doCall(java.lang.Object it) { |
| for(java.lang.Integer i : new groovy.lang.IntRange(1, 8)){ |
| org.codehaus.groovy.runtime.DefaultGroovyStaticMethods.sleep(null, 30); |
| out("thread loop " + java.lang.String.valueOf(i)); |
| counter.incrementAndGet(); |
| } |
| |
| } |
| |
| public void doCall() { |
| doCall(null); |
| } |
| |
| }); |
| |
| for(java.lang.Integer j : new groovy.lang.IntRange(1, 4)){ |
| org.codehaus.groovy.runtime.DefaultGroovyStaticMethods.sleep(null, 50); |
| out("main loop " + java.lang.String.valueOf(j)); |
| counter.incrementAndGet(); |
| } |
| |
| |
| th.join(); |
| |
| assert counter.get() == 12; |
| return null; |
| |
| } |
| |
| public synchronized void out(groovy.lang.GString message) { |
| println(message); |
| } |
| |
| public concurency(groovy.lang.Binding binding) { |
| super(binding); |
| } |
| public concurency() { |
| super(); |
| } |
| } |