/*
* The Computer Language Benchmarks Game
* http://shootout.alioth.debian.org/
*
* contributed by Klaus Friedel
* converted to Groovy by Danno Ferrin
*/
import java.util.concurrent.locks.LockSupport
class MessageThread extends Thread {
MessageThread nextThread
volatile Integer message
MessageThread(MessageThread nextThread, int name) {
super(name as String)
this.nextThread = nextThread
}
void run() {
while (true) nextThread.enqueue(dequeue())
}
void enqueue(Integer hopsRemaining) {
if (hopsRemaining == 0) {
println(getName())
System.exit(0)
}
// as only one message populates the ring, it's impossible
// that queue is not empty
message = hopsRemaining - 1
LockSupport.unpark(this) // work waiting...
}
private Integer dequeue() {
while (message == null) {
LockSupport.park()
}
Integer msg = message
message = null
return msg
}
}
class threadring {
public static void main(String[] args) {
int THREAD_COUNT = 503
int hopCount = args[0] as Integer
MessageThread first
MessageThread last
(THREAD_COUNT..1).each {
i ->
first = new MessageThread(first, i)
if (i == THREAD_COUNT) last = first
}
// close the ring
last.nextThread = first
// start all threads
MessageThread t = first
THREAD_COUNT.times {
t.start()
t = t.nextThread
}
// inject message
first.enqueue(hopCount)
first.join() // wait for System.exit
}
}
Groovyc | Indy | Static | |
---|---|---|---|
Lines Removed | 32 | 30 | 48 |
Total Lines - Before | 1142 | 803 | 668 |
Percentage of Lines Removed | 2.8 | 3.7 | 7.2 |
Groovyc | Indy | Static | |
---|---|---|---|
Benchmark Average - Before | 479 | 553 | 376 |
Benchmark Average - After | 481 | 553 | 376 |
Benchmark Std Dev - Before | 9.16 | 15.27 | 7.42 |
Benchmark Std Dev - After | 10.2 | 16.27 | 6.82 |
Compiled from "threadring.groovy"
public class threadring implements groovy.lang.GroovyObject {
public static transient boolean __$stMC;
public threadring();
Code:
0: aload_0
1: invokespecial #17 // Method java/lang/Object."<init>":()V
4: invokestatic #21 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
7: astore_1
8: aload_0
9: invokevirtual #25 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
12: astore_2
13: aload_2
14: aload_0
15: swap
16: putfield #27 // Field metaClass:Lgroovy/lang/MetaClass;
19: aload_2
20: pop
21: return
public static void main(java.lang.String...);
Code:
0: invokestatic #21 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
3: astore_1
4: sipush 503
7: invokestatic #37 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
10: new #39 // class groovy/lang/Reference
13: dup_x1
14: swap
15: invokespecial #42 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
18: astore_2
19: aload_2
20: pop
21: ldc #43 // int 0
23: istore_3
24: invokestatic #49 // Method org/codehaus/groovy/runtime/BytecodeInterface8.isOrigInt:()Z
27: ifeq 45
30: getstatic #51 // Field __$stMC:Z
33: ifne 45
36: invokestatic #54 // Method org/codehaus/groovy/runtime/BytecodeInterface8.disabledStandardMetaClass:()Z
39: ifne 45
42: goto 81
45: aload_1
46: ldc #43 // int 0
48: aaload
49: aload_0
50: iconst_0
51: invokestatic #37 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
54: invokeinterface #60, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
59: ldc #33 // class java/lang/Integer
61: invokestatic #66 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.asType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
64: checkcast #33 // class java/lang/Integer
67: astore 4
69: aload 4
71: invokevirtual #70 // Method java/lang/Integer.intValue:()I
74: istore_3
75: aload 4
77: pop
78: goto 105
81: aload_0
82: iconst_0
83: invokestatic #74 // Method org/codehaus/groovy/runtime/BytecodeInterface8.objectArrayGet:([Ljava/lang/Object;I)Ljava/lang/Object;
86: ldc #33 // class java/lang/Integer
88: invokestatic #66 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.asType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
91: checkcast #33 // class java/lang/Integer
94: astore 5
96: aload 5
98: invokevirtual #70 // Method java/lang/Integer.intValue:()I
101: istore_3
102: aload 5
104: pop
105: aconst_null
106: new #39 // class groovy/lang/Reference
109: dup_x1
110: swap
111: invokespecial #42 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
114: astore 6
116: aload 6
118: invokevirtual #78 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
121: checkcast #80 // class MessageThread
124: pop
125: aconst_null
126: new #39 // class groovy/lang/Reference
129: dup_x1
130: swap
131: invokespecial #42 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
134: astore 7
136: aload 7
138: invokevirtual #78 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
141: checkcast #80 // class MessageThread
144: pop
145: aload_1
146: ldc #81 // int 1
148: aaload
149: aload_2
150: invokevirtual #78 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
153: checkcast #33 // class java/lang/Integer
156: iconst_1
157: invokestatic #37 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
160: ldc #81 // int 1
162: invokestatic #85 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createRange:(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/util/List;
165: new #87 // class threadring$_main_closure1
168: dup
169: ldc #2 // class threadring
171: ldc #2 // class threadring
173: aload_2
174: aload 7
176: aload 6
178: invokespecial #90 // Method threadring$_main_closure1."<init>":(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;Lgroovy/lang/Reference;Lgroovy/lang/Reference;)V
181: invokeinterface #60, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
186: pop
187: aload 6
189: invokevirtual #78 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
192: checkcast #80 // class MessageThread
195: astore 8
197: aload 8
199: aconst_null
200: aload 7
202: invokevirtual #78 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
205: checkcast #80 // class MessageThread
208: ldc #92 // String nextThread
210: checkcast #94 // class java/lang/String
213: invokestatic #98 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.setProperty:(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;)V
216: aload 8
218: pop
219: aload 6
221: invokevirtual #78 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
224: checkcast #80 // class MessageThread
227: new #39 // class groovy/lang/Reference
230: dup_x1
231: swap
232: invokespecial #42 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
235: astore 9
237: aload 9
239: pop
240: aload_1
241: ldc #99 // int 2
243: aaload
244: aload_2
245: invokevirtual #78 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
248: checkcast #33 // class java/lang/Integer
251: new #101 // class threadring$_main_closure2
254: dup
255: ldc #2 // class threadring
257: ldc #2 // class threadring
259: aload 9
261: invokespecial #104 // Method threadring$_main_closure2."<init>":(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;)V
264: invokeinterface #60, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
269: pop
270: aload_1
271: ldc #105 // int 3
273: aaload
274: aload 6
276: invokevirtual #78 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
279: checkcast #80 // class MessageThread
282: iload_3
283: invokestatic #37 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
286: invokeinterface #60, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
291: pop
292: aload_1
293: ldc #106 // int 4
295: aaload
296: aload 6
298: invokevirtual #78 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
301: checkcast #80 // class MessageThread
304: invokeinterface #109, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;)Ljava/lang/Object;
309: pop
310: return
protected groovy.lang.MetaClass $getStaticMetaClass();
Code:
0: aload_0
1: invokevirtual #122 // Method java/lang/Object.getClass:()Ljava/lang/Class;
4: ldc #2 // class threadring
6: if_acmpeq 14
9: aload_0
10: invokestatic #126 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
13: areturn
14: getstatic #128 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
17: astore_1
18: aload_1
19: ifnonnull 34
22: aload_0
23: invokevirtual #122 // Method java/lang/Object.getClass:()Ljava/lang/Class;
26: invokestatic #134 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
29: dup
30: astore_1
31: putstatic #128 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
34: aload_1
35: invokevirtual #137 // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
38: areturn
public groovy.lang.MetaClass getMetaClass();
Code:
0: aload_0
1: getfield #27 // Field metaClass:Lgroovy/lang/MetaClass;
4: dup
5: ifnull 9
8: areturn
9: pop
10: aload_0
11: dup
12: invokevirtual #25 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
15: putfield #27 // Field metaClass:Lgroovy/lang/MetaClass;
18: aload_0
19: getfield #27 // Field metaClass:Lgroovy/lang/MetaClass;
22: areturn
public void setMetaClass(groovy.lang.MetaClass);
Code:
0: aload_0
1: aload_1
2: putfield #27 // Field metaClass:Lgroovy/lang/MetaClass;
5: return
public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
Code:
0: aload_0
1: invokevirtual #142 // Method getMetaClass:()Lgroovy/lang/MetaClass;
4: aload_0
5: aload_1
6: aload_2
7: invokeinterface #147, 4 // InterfaceMethod groovy/lang/MetaClass.invokeMethod:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
12: areturn
public java.lang.Object getProperty(java.lang.String);
Code:
0: aload_0
1: invokevirtual #142 // Method getMetaClass:()Lgroovy/lang/MetaClass;
4: aload_0
5: aload_1
6: invokeinterface #152, 3 // InterfaceMethod groovy/lang/MetaClass.getProperty:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
11: areturn
public void setProperty(java.lang.String, java.lang.Object);
Code:
0: aload_0
1: invokevirtual #142 // Method getMetaClass:()Lgroovy/lang/MetaClass;
4: aload_0
5: aload_1
6: aload_2
7: invokeinterface #156, 4 // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
12: return
}
Compiled from "threadring.groovy"
public class threadring implements groovy.lang.GroovyObject {
public static transient boolean __$stMC;
public threadring();
Code:
0: aload_0
1: invokespecial #17 // Method java/lang/Object."<init>":()V
4: aload_0
5: invokevirtual #21 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
8: astore_1
9: aload_1
10: aload_0
11: swap
12: putfield #23 // Field metaClass:Lgroovy/lang/MetaClass;
15: aload_1
16: pop
17: return
public static void main(java.lang.String...);
Code:
0: sipush 503
3: invokestatic #33 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
6: new #35 // class groovy/lang/Reference
9: dup_x1
10: swap
11: invokespecial #38 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
14: astore_1
15: aload_1
16: pop
17: aload_0
18: iconst_0
19: invokedynamic #52, 0 // InvokeDynamic #0:invoke:([Ljava/lang/String;I)Ljava/lang/Object;
24: ldc #29 // class java/lang/Integer
26: invokedynamic #57, 0 // InvokeDynamic #1:invoke:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
31: checkcast #29 // class java/lang/Integer
34: invokevirtual #61 // Method java/lang/Integer.intValue:()I
37: istore_2
38: iload_2
39: pop
40: aconst_null
41: new #35 // class groovy/lang/Reference
44: dup_x1
45: swap
46: invokespecial #38 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
49: astore_3
50: aload_3
51: invokevirtual #65 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
54: checkcast #67 // class MessageThread
57: pop
58: aconst_null
59: new #35 // class groovy/lang/Reference
62: dup_x1
63: swap
64: invokespecial #38 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
67: astore 4
69: aload 4
71: invokevirtual #65 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
74: checkcast #67 // class MessageThread
77: pop
78: aload_1
79: invokevirtual #65 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
82: checkcast #29 // class java/lang/Integer
85: iconst_1
86: invokestatic #33 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
89: ldc #68 // int 1
91: invokestatic #74 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createRange:(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/util/List;
94: new #76 // class threadring$_main_closure1
97: dup
98: ldc #2 // class threadring
100: ldc #2 // class threadring
102: aload_1
103: aload 4
105: aload_3
106: invokespecial #79 // Method threadring$_main_closure1."<init>":(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;Lgroovy/lang/Reference;Lgroovy/lang/Reference;)V
109: invokedynamic #84, 0 // InvokeDynamic #2:invoke:(Lgroovy/lang/Range;Lgroovy/lang/Closure;)Ljava/lang/Object;
114: pop
115: aload_3
116: invokevirtual #65 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
119: checkcast #67 // class MessageThread
122: astore 5
124: aload 5
126: aconst_null
127: aload 4
129: invokevirtual #65 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
132: checkcast #67 // class MessageThread
135: ldc #86 // String nextThread
137: checkcast #88 // class java/lang/String
140: invokestatic #92 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.setProperty:(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;)V
143: aload 5
145: pop
146: aload_3
147: invokevirtual #65 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
150: checkcast #67 // class MessageThread
153: new #35 // class groovy/lang/Reference
156: dup_x1
157: swap
158: invokespecial #38 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
161: astore 6
163: aload 6
165: pop
166: aload_1
167: invokevirtual #65 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
170: checkcast #29 // class java/lang/Integer
173: new #94 // class threadring$_main_closure2
176: dup
177: ldc #2 // class threadring
179: ldc #2 // class threadring
181: aload 6
183: invokespecial #97 // Method threadring$_main_closure2."<init>":(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;)V
186: invokedynamic #102, 0 // InvokeDynamic #3:invoke:(Ljava/lang/Integer;Lgroovy/lang/Closure;)Ljava/lang/Object;
191: pop
192: aload_3
193: invokevirtual #65 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
196: checkcast #67 // class MessageThread
199: iload_2
200: invokedynamic #107, 0 // InvokeDynamic #4:invoke:(LMessageThread;I)Ljava/lang/Object;
205: pop
206: aload_3
207: invokevirtual #65 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
210: checkcast #67 // class MessageThread
213: invokedynamic #112, 0 // InvokeDynamic #5:invoke:(LMessageThread;)Ljava/lang/Object;
218: pop
219: return
protected groovy.lang.MetaClass $getStaticMetaClass();
Code:
0: aload_0
1: invokevirtual #125 // Method java/lang/Object.getClass:()Ljava/lang/Class;
4: ldc #2 // class threadring
6: if_acmpeq 14
9: aload_0
10: invokestatic #129 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
13: areturn
14: getstatic #131 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
17: astore_1
18: aload_1
19: ifnonnull 34
22: aload_0
23: invokevirtual #125 // Method java/lang/Object.getClass:()Ljava/lang/Class;
26: invokestatic #137 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
29: dup
30: astore_1
31: putstatic #131 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
34: aload_1
35: invokevirtual #140 // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
38: areturn
public groovy.lang.MetaClass getMetaClass();
Code:
0: aload_0
1: getfield #23 // Field metaClass:Lgroovy/lang/MetaClass;
4: dup
5: ifnull 9
8: areturn
9: pop
10: aload_0
11: dup
12: invokevirtual #21 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
15: putfield #23 // Field metaClass:Lgroovy/lang/MetaClass;
18: aload_0
19: getfield #23 // Field metaClass:Lgroovy/lang/MetaClass;
22: areturn
public void setMetaClass(groovy.lang.MetaClass);
Code:
0: aload_0
1: aload_1
2: putfield #23 // Field metaClass:Lgroovy/lang/MetaClass;
5: return
public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
Code:
0: aload_0
1: invokevirtual #147 // Method getMetaClass:()Lgroovy/lang/MetaClass;
4: aload_0
5: aload_1
6: aload_2
7: invokeinterface #150, 4 // InterfaceMethod groovy/lang/MetaClass.invokeMethod:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
12: areturn
public java.lang.Object getProperty(java.lang.String);
Code:
0: aload_0
1: invokevirtual #147 // Method getMetaClass:()Lgroovy/lang/MetaClass;
4: aload_0
5: aload_1
6: invokeinterface #155, 3 // InterfaceMethod groovy/lang/MetaClass.getProperty:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
11: areturn
public void setProperty(java.lang.String, java.lang.Object);
Code:
0: aload_0
1: invokevirtual #147 // Method getMetaClass:()Lgroovy/lang/MetaClass;
4: aload_0
5: aload_1
6: aload_2
7: invokeinterface #159, 4 // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
12: return
}
Compiled from "threadring.groovy"
public class threadring implements groovy.lang.GroovyObject {
public static transient boolean __$stMC;
public threadring();
Code:
0: aload_0
1: invokespecial #17 // Method java/lang/Object."<init>":()V
4: aload_0
5: invokevirtual #21 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
8: astore_1
9: aload_1
10: aload_0
11: swap
12: putfield #23 // Field metaClass:Lgroovy/lang/MetaClass;
15: aload_1
16: pop
17: return
public static void main(java.lang.String...);
Code:
0: sipush 503
3: invokestatic #33 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
6: new #35 // class groovy/lang/Reference
9: dup_x1
10: swap
11: invokespecial #38 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
14: astore_1
15: aload_1
16: pop
17: aload_0
18: iconst_0
19: invokestatic #44 // Method org/codehaus/groovy/runtime/BytecodeInterface8.objectArrayGet:([Ljava/lang/Object;I)Ljava/lang/Object;
22: ldc #29 // class java/lang/Integer
24: invokestatic #50 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.asType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
27: checkcast #29 // class java/lang/Integer
30: invokevirtual #54 // Method java/lang/Integer.intValue:()I
33: istore_2
34: iload_2
35: pop
36: aconst_null
37: new #35 // class groovy/lang/Reference
40: dup_x1
41: swap
42: invokespecial #38 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
45: astore_3
46: aload_3
47: invokevirtual #58 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
50: checkcast #60 // class MessageThread
53: pop
54: aconst_null
55: new #35 // class groovy/lang/Reference
58: dup_x1
59: swap
60: invokespecial #38 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
63: astore 4
65: aload 4
67: invokevirtual #58 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
70: checkcast #60 // class MessageThread
73: pop
74: new #62 // class groovy/lang/IntRange
77: dup
78: iconst_1
79: aload_1
80: invokevirtual #58 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
83: checkcast #29 // class java/lang/Integer
86: invokevirtual #54 // Method java/lang/Integer.intValue:()I
89: iconst_1
90: invokespecial #65 // Method groovy/lang/IntRange."<init>":(ZII)V
93: new #67 // class threadring$_main_closure1
96: dup
97: ldc #2 // class threadring
99: ldc #2 // class threadring
101: aload_1
102: aload 4
104: aload_3
105: invokespecial #70 // Method threadring$_main_closure1."<init>":(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;Lgroovy/lang/Reference;Lgroovy/lang/Reference;)V
108: invokestatic #76 // Method org/codehaus/groovy/runtime/DefaultGroovyMethods.each:(Ljava/util/List;Lgroovy/lang/Closure;)Ljava/util/List;
111: pop
112: aload_3
113: invokevirtual #58 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
116: checkcast #60 // class MessageThread
119: dup
120: astore 5
122: aload 4
124: invokevirtual #58 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
127: checkcast #60 // class MessageThread
130: aload 5
132: invokevirtual #80 // Method MessageThread.setNextThread:(LMessageThread;)V
135: aconst_null
136: pop
137: pop
138: aload_3
139: invokevirtual #58 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
142: checkcast #60 // class MessageThread
145: new #35 // class groovy/lang/Reference
148: dup_x1
149: swap
150: invokespecial #38 // Method groovy/lang/Reference."<init>":(Ljava/lang/Object;)V
153: astore 6
155: aload 6
157: pop
158: aload_1
159: invokevirtual #58 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
162: checkcast #29 // class java/lang/Integer
165: new #82 // class threadring$_main_closure2
168: dup
169: ldc #2 // class threadring
171: ldc #2 // class threadring
173: aload 6
175: invokespecial #85 // Method threadring$_main_closure2."<init>":(Ljava/lang/Object;Ljava/lang/Object;Lgroovy/lang/Reference;)V
178: invokestatic #89 // Method org/codehaus/groovy/runtime/DefaultGroovyMethods.times:(Ljava/lang/Number;Lgroovy/lang/Closure;)V
181: aconst_null
182: pop
183: aload_3
184: invokevirtual #58 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
187: checkcast #60 // class MessageThread
190: iload_2
191: invokestatic #33 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
194: invokevirtual #93 // Method MessageThread.enqueue:(Ljava/lang/Integer;)V
197: aconst_null
198: pop
199: aload_3
200: invokevirtual #58 // Method groovy/lang/Reference.get:()Ljava/lang/Object;
203: checkcast #60 // class MessageThread
206: checkcast #60 // class MessageThread
209: invokevirtual #96 // Method MessageThread.join:()V
212: aconst_null
213: pop
214: return
protected groovy.lang.MetaClass $getStaticMetaClass();
Code:
0: aload_0
1: invokevirtual #109 // Method java/lang/Object.getClass:()Ljava/lang/Class;
4: ldc #2 // class threadring
6: if_acmpeq 14
9: aload_0
10: invokestatic #113 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
13: areturn
14: getstatic #115 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
17: astore_1
18: aload_1
19: ifnonnull 34
22: aload_0
23: invokevirtual #109 // Method java/lang/Object.getClass:()Ljava/lang/Class;
26: invokestatic #121 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
29: dup
30: astore_1
31: putstatic #115 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
34: aload_1
35: invokevirtual #124 // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
38: areturn
public groovy.lang.MetaClass getMetaClass();
Code:
0: aload_0
1: getfield #23 // Field metaClass:Lgroovy/lang/MetaClass;
4: dup
5: ifnull 9
8: areturn
9: pop
10: aload_0
11: dup
12: invokevirtual #21 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
15: putfield #23 // Field metaClass:Lgroovy/lang/MetaClass;
18: aload_0
19: getfield #23 // Field metaClass:Lgroovy/lang/MetaClass;
22: areturn
public void setMetaClass(groovy.lang.MetaClass);
Code:
0: aload_0
1: aload_1
2: putfield #23 // Field metaClass:Lgroovy/lang/MetaClass;
5: return
public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
Code:
0: aload_0
1: invokevirtual #129 // Method getMetaClass:()Lgroovy/lang/MetaClass;
4: aload_0
5: aload_1
6: aload_2
7: invokeinterface #134, 4 // InterfaceMethod groovy/lang/MetaClass.invokeMethod:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
12: areturn
public java.lang.Object getProperty(java.lang.String);
Code:
0: aload_0
1: invokevirtual #129 // Method getMetaClass:()Lgroovy/lang/MetaClass;
4: aload_0
5: aload_1
6: invokeinterface #139, 3 // InterfaceMethod groovy/lang/MetaClass.getProperty:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
11: areturn
public void setProperty(java.lang.String, java.lang.Object);
Code:
0: aload_0
1: invokevirtual #129 // Method getMetaClass:()Lgroovy/lang/MetaClass;
4: aload_0
5: aload_1
6: aload_2
7: invokeinterface #144, 4 // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
12: return
}
Compiled from "threadring.groovy"
public class MessageThread extends java.lang.Thread implements groovy.lang.GroovyObject {
public static transient boolean __$stMC;
public MessageThread(MessageThread, int);
Code:
0: invokestatic #25 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
3: astore_3
4: iconst_1
5: anewarray #27 // class java/lang/Object
8: dup
9: iconst_0
10: iload_2
11: invokestatic #33 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
14: ldc #35 // class java/lang/String
16: invokestatic #41 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.asType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
19: checkcast #35 // class java/lang/String
22: ldc #35 // class java/lang/String
24: invokestatic #45 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createPojoWrapper:(Ljava/lang/Object;Ljava/lang/Class;)Lorg/codehaus/groovy/runtime/wrappers/Wrapper;
27: aastore
28: dup
29: bipush -1
31: ldc #4 // class java/lang/Thread
33: invokestatic #49 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.selectConstructorAndTransformArguments:([Ljava/lang/Object;ILjava/lang/Class;)I
36: aload_0
37: swap
38: lookupswitch { // 9
-1526974093: 120
-1428966913: 141
-1274082179: 160
-1273978571: 191
39797: 222
301372330: 231
1019364531: 264
1387934505: 307
1535559793: 340
default: 391
}
120: swap
121: dup_x1
122: dup
123: iconst_0
124: aaload
125: ldc #51 // class java/lang/Runnable
127: invokestatic #54 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
130: checkcast #51 // class java/lang/Runnable
133: swap
134: pop
135: invokespecial #57 // Method java/lang/Thread."<init>":(Ljava/lang/Runnable;)V
138: goto 401
141: swap
142: dup_x1
143: dup
144: iconst_0
145: aaload
146: invokestatic #63 // Method org/codehaus/groovy/runtime/typehandling/ShortTypeHandling.castToString:(Ljava/lang/Object;)Ljava/lang/String;
149: checkcast #35 // class java/lang/String
152: swap
153: pop
154: invokespecial #66 // Method java/lang/Thread."<init>":(Ljava/lang/String;)V
157: goto 401
160: swap
161: dup_x1
162: dup
163: iconst_0
164: aaload
165: ldc #51 // class java/lang/Runnable
167: invokestatic #54 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
170: checkcast #51 // class java/lang/Runnable
173: swap
174: dup
175: iconst_1
176: aaload
177: invokestatic #63 // Method org/codehaus/groovy/runtime/typehandling/ShortTypeHandling.castToString:(Ljava/lang/Object;)Ljava/lang/String;
180: checkcast #35 // class java/lang/String
183: swap
184: pop
185: invokespecial #69 // Method java/lang/Thread."<init>":(Ljava/lang/Runnable;Ljava/lang/String;)V
188: goto 401
191: swap
192: dup_x1
193: dup
194: iconst_0
195: aaload
196: ldc #71 // class java/lang/ThreadGroup
198: invokestatic #54 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
201: checkcast #71 // class java/lang/ThreadGroup
204: swap
205: dup
206: iconst_1
207: aaload
208: invokestatic #63 // Method org/codehaus/groovy/runtime/typehandling/ShortTypeHandling.castToString:(Ljava/lang/Object;)Ljava/lang/String;
211: checkcast #35 // class java/lang/String
214: swap
215: pop
216: invokespecial #74 // Method java/lang/Thread."<init>":(Ljava/lang/ThreadGroup;Ljava/lang/String;)V
219: goto 401
222: swap
223: dup_x1
224: pop
225: invokespecial #77 // Method java/lang/Thread."<init>":()V
228: goto 401
231: swap
232: dup_x1
233: dup
234: iconst_0
235: aaload
236: ldc #51 // class java/lang/Runnable
238: invokestatic #54 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
241: checkcast #51 // class java/lang/Runnable
244: swap
245: dup
246: iconst_1
247: aaload
248: ldc #79 // class java/security/AccessControlContext
250: invokestatic #54 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
253: checkcast #79 // class java/security/AccessControlContext
256: swap
257: pop
258: invokespecial #82 // Method java/lang/Thread."<init>":(Ljava/lang/Runnable;Ljava/security/AccessControlContext;)V
261: goto 401
264: swap
265: dup_x1
266: dup
267: iconst_0
268: aaload
269: ldc #71 // class java/lang/ThreadGroup
271: invokestatic #54 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
274: checkcast #71 // class java/lang/ThreadGroup
277: swap
278: dup
279: iconst_1
280: aaload
281: ldc #51 // class java/lang/Runnable
283: invokestatic #54 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
286: checkcast #51 // class java/lang/Runnable
289: swap
290: dup
291: iconst_2
292: aaload
293: invokestatic #63 // Method org/codehaus/groovy/runtime/typehandling/ShortTypeHandling.castToString:(Ljava/lang/Object;)Ljava/lang/String;
296: checkcast #35 // class java/lang/String
299: swap
300: pop
301: invokespecial #85 // Method java/lang/Thread."<init>":(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;)V
304: goto 401
307: swap
308: dup_x1
309: dup
310: iconst_0
311: aaload
312: ldc #71 // class java/lang/ThreadGroup
314: invokestatic #54 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
317: checkcast #71 // class java/lang/ThreadGroup
320: swap
321: dup
322: iconst_1
323: aaload
324: ldc #51 // class java/lang/Runnable
326: invokestatic #54 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
329: checkcast #51 // class java/lang/Runnable
332: swap
333: pop
334: invokespecial #88 // Method java/lang/Thread."<init>":(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;)V
337: goto 401
340: swap
341: dup_x1
342: dup
343: iconst_0
344: aaload
345: ldc #71 // class java/lang/ThreadGroup
347: invokestatic #54 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
350: checkcast #71 // class java/lang/ThreadGroup
353: swap
354: dup
355: iconst_1
356: aaload
357: ldc #51 // class java/lang/Runnable
359: invokestatic #54 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
362: checkcast #51 // class java/lang/Runnable
365: swap
366: dup
367: iconst_2
368: aaload
369: invokestatic #63 // Method org/codehaus/groovy/runtime/typehandling/ShortTypeHandling.castToString:(Ljava/lang/Object;)Ljava/lang/String;
372: checkcast #35 // class java/lang/String
375: swap
376: dup
377: iconst_3
378: aaload
379: invokestatic #94 // Method org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.longUnbox:(Ljava/lang/Object;)J
382: dup2_x1
383: pop2
384: pop
385: invokespecial #97 // Method java/lang/Thread."<init>":(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;J)V
388: goto 401
391: new #99 // class java/lang/IllegalArgumentException
394: dup
395: ldc #101 // String This class has been compiled with a super class which is binary incompatible with the current super class found on classpath. You should recompile this class with the new version.
397: invokespecial #102 // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
400: athrow
401: pop
402: aload_0
403: invokevirtual #106 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
406: astore 4
408: aload 4
410: aload_0
411: swap
412: putfield #108 // Field metaClass:Lgroovy/lang/MetaClass;
415: aload_1
416: astore 5
418: aload 5
420: ldc #2 // class MessageThread
422: invokestatic #54 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
425: checkcast #2 // class MessageThread
428: aload_0
429: swap
430: putfield #110 // Field nextThread:LMessageThread;
433: return
public void run();
Code:
0: invokestatic #25 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
3: astore_1
4: getstatic #116 // Field __$stMC:Z
7: ifne 19
10: invokestatic #122 // Method org/codehaus/groovy/runtime/BytecodeInterface8.disabledStandardMetaClass:()Z
13: ifne 19
16: goto 49
19: aload_1
20: ldc #123 // int 0
22: aaload
23: aload_0
24: getfield #110 // Field nextThread:LMessageThread;
27: aload_1
28: ldc #124 // int 1
30: aaload
31: aload_0
32: invokeinterface #130, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;)Ljava/lang/Object;
37: invokeinterface #134, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
42: pop
43: goto 19
46: goto 70
49: aload_1
50: ldc #135 // int 2
52: aaload
53: aload_0
54: getfield #110 // Field nextThread:LMessageThread;
57: aload_0
58: invokespecial #139 // Method dequeue:()Ljava/lang/Integer;
61: invokeinterface #134, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
66: pop
67: goto 49
70: return
public void enqueue(java.lang.Integer);
Code:
0: invokestatic #25 // Method $getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;
3: astore_2
4: aload_1
5: iconst_0
6: invokestatic #33 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
9: invokestatic #145 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
12: ifeq 52
15: aload_2
16: ldc #146 // int 3
18: aaload
19: aload_0
20: aload_2
21: ldc #147 // int 4
23: aaload
24: aload_0
25: invokeinterface #130, 2 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;)Ljava/lang/Object;
30: invokeinterface #150, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.callCurrent:(Lgroovy/lang/GroovyObject;Ljava/lang/Object;)Ljava/lang/Object;
35: pop
36: aload_2
37: ldc #151 // int 5
39: aaload
40: ldc #153 // class java/lang/System
42: iconst_0
43: invokestatic #33 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
46: invokeinterface #134, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
51: pop
52: aload_2
53: ldc #154 // int 6
55: aaload
56: aload_1
57: iconst_1
58: invokestatic #33 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
61: invokeinterface #134, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
66: astore_3
67: aload_3
68: ldc #29 // class java/lang/Integer
70: invokestatic #54 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
73: checkcast #29 // class java/lang/Integer
76: aload_0
77: swap
78: putfield #156 // Field message:Ljava/lang/Integer;
81: aload_2
82: ldc #157 // int 7
84: aaload
85: ldc #159 // class java/util/concurrent/locks/LockSupport
87: aload_0
88: invokeinterface #134, 3 // InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
93: pop
94: return
protected groovy.lang.MetaClass $getStaticMetaClass();
Code:
0: aload_0
1: invokevirtual #169 // Method java/lang/Object.getClass:()Ljava/lang/Class;
4: ldc #2 // class MessageThread
6: if_acmpeq 14
9: aload_0
10: invokestatic #173 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
13: areturn
14: getstatic #175 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
17: astore_1
18: aload_1
19: ifnonnull 34
22: aload_0
23: invokevirtual #169 // Method java/lang/Object.getClass:()Ljava/lang/Class;
26: invokestatic #181 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
29: dup
30: astore_1
31: putstatic #175 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
34: aload_1
35: invokevirtual #184 // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
38: areturn
public groovy.lang.MetaClass getMetaClass();
Code:
0: aload_0
1: getfield #108 // Field metaClass:Lgroovy/lang/MetaClass;
4: dup
5: ifnull 9
8: areturn
9: pop
10: aload_0
11: dup
12: invokevirtual #106 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
15: putfield #108 // Field metaClass:Lgroovy/lang/MetaClass;
18: aload_0
19: getfield #108 // Field metaClass:Lgroovy/lang/MetaClass;
22: areturn
public void setMetaClass(groovy.lang.MetaClass);
Code:
0: aload_0
1: aload_1
2: putfield #108 // Field metaClass:Lgroovy/lang/MetaClass;
5: return
public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
Code:
0: aload_0
1: invokevirtual #189 // Method getMetaClass:()Lgroovy/lang/MetaClass;
4: aload_0
5: aload_1
6: aload_2
7: invokeinterface #194, 4 // InterfaceMethod groovy/lang/MetaClass.invokeMethod:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
12: areturn
public java.lang.Object getProperty(java.lang.String);
Code:
0: aload_0
1: invokevirtual #189 // Method getMetaClass:()Lgroovy/lang/MetaClass;
4: aload_0
5: aload_1
6: invokeinterface #199, 3 // InterfaceMethod groovy/lang/MetaClass.getProperty:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
11: areturn
public void setProperty(java.lang.String, java.lang.Object);
Code:
0: aload_0
1: invokevirtual #189 // Method getMetaClass:()Lgroovy/lang/MetaClass;
4: aload_0
5: aload_1
6: aload_2
7: invokeinterface #204, 4 // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
12: return
public MessageThread getNextThread();
Code:
0: aload_0
1: getfield #110 // Field nextThread:LMessageThread;
4: areturn
public void setNextThread(MessageThread);
Code:
0: aload_0
1: aload_1
2: putfield #110 // Field nextThread:LMessageThread;
5: return
public java.lang.Integer getMessage();
Code:
0: aload_0
1: getfield #156 // Field message:Ljava/lang/Integer;
4: areturn
public void setMessage(java.lang.Integer);
Code:
0: aload_0
1: aload_1
2: putfield #156 // Field message:Ljava/lang/Integer;
5: return
public void super$2$run();
Code:
0: aload_0
1: invokespecial #213 // Method java/lang/Thread.run:()V
4: return
}
Compiled from "threadring.groovy"
public class MessageThread extends java.lang.Thread implements groovy.lang.GroovyObject {
public static transient boolean __$stMC;
public MessageThread(MessageThread, int);
Code:
0: iconst_1
1: anewarray #21 // class java/lang/Object
4: dup
5: iconst_0
6: iload_2
7: ldc #23 // class java/lang/String
9: invokedynamic #37, 0 // InvokeDynamic #0:invoke:(ILjava/lang/Class;)Ljava/lang/Object;
14: checkcast #23 // class java/lang/String
17: ldc #23 // class java/lang/String
19: invokestatic #43 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createPojoWrapper:(Ljava/lang/Object;Ljava/lang/Class;)Lorg/codehaus/groovy/runtime/wrappers/Wrapper;
22: aastore
23: dup
24: bipush -1
26: ldc #4 // class java/lang/Thread
28: invokestatic #47 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.selectConstructorAndTransformArguments:([Ljava/lang/Object;ILjava/lang/Class;)I
31: aload_0
32: swap
33: lookupswitch { // 9
-1526974093: 116
-1428966913: 134
-1274082179: 152
-1273978571: 179
39797: 206
301372330: 215
1019364531: 242
1387934505: 278
1535559793: 305
default: 349
}
116: swap
117: dup_x1
118: dup
119: iconst_0
120: aaload
121: invokedynamic #55, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Runnable;
126: swap
127: pop
128: invokespecial #58 // Method java/lang/Thread."<init>":(Ljava/lang/Runnable;)V
131: goto 359
134: swap
135: dup_x1
136: dup
137: iconst_0
138: aaload
139: invokedynamic #61, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/String;
144: swap
145: pop
146: invokespecial #64 // Method java/lang/Thread."<init>":(Ljava/lang/String;)V
149: goto 359
152: swap
153: dup_x1
154: dup
155: iconst_0
156: aaload
157: invokedynamic #55, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Runnable;
162: swap
163: dup
164: iconst_1
165: aaload
166: invokedynamic #61, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/String;
171: swap
172: pop
173: invokespecial #67 // Method java/lang/Thread."<init>":(Ljava/lang/Runnable;Ljava/lang/String;)V
176: goto 359
179: swap
180: dup_x1
181: dup
182: iconst_0
183: aaload
184: invokedynamic #70, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/ThreadGroup;
189: swap
190: dup
191: iconst_1
192: aaload
193: invokedynamic #61, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/String;
198: swap
199: pop
200: invokespecial #73 // Method java/lang/Thread."<init>":(Ljava/lang/ThreadGroup;Ljava/lang/String;)V
203: goto 359
206: swap
207: dup_x1
208: pop
209: invokespecial #76 // Method java/lang/Thread."<init>":()V
212: goto 359
215: swap
216: dup_x1
217: dup
218: iconst_0
219: aaload
220: invokedynamic #55, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Runnable;
225: swap
226: dup
227: iconst_1
228: aaload
229: invokedynamic #79, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/security/AccessControlContext;
234: swap
235: pop
236: invokespecial #82 // Method java/lang/Thread."<init>":(Ljava/lang/Runnable;Ljava/security/AccessControlContext;)V
239: goto 359
242: swap
243: dup_x1
244: dup
245: iconst_0
246: aaload
247: invokedynamic #70, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/ThreadGroup;
252: swap
253: dup
254: iconst_1
255: aaload
256: invokedynamic #55, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Runnable;
261: swap
262: dup
263: iconst_2
264: aaload
265: invokedynamic #61, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/String;
270: swap
271: pop
272: invokespecial #85 // Method java/lang/Thread."<init>":(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;)V
275: goto 359
278: swap
279: dup_x1
280: dup
281: iconst_0
282: aaload
283: invokedynamic #70, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/ThreadGroup;
288: swap
289: dup
290: iconst_1
291: aaload
292: invokedynamic #55, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Runnable;
297: swap
298: pop
299: invokespecial #88 // Method java/lang/Thread."<init>":(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;)V
302: goto 359
305: swap
306: dup_x1
307: dup
308: iconst_0
309: aaload
310: invokedynamic #70, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/ThreadGroup;
315: swap
316: dup
317: iconst_1
318: aaload
319: invokedynamic #55, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Runnable;
324: swap
325: dup
326: iconst_2
327: aaload
328: invokedynamic #61, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/String;
333: swap
334: dup
335: iconst_3
336: aaload
337: invokestatic #94 // Method org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.longUnbox:(Ljava/lang/Object;)J
340: dup2_x1
341: pop2
342: pop
343: invokespecial #97 // Method java/lang/Thread."<init>":(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;J)V
346: goto 359
349: new #99 // class java/lang/IllegalArgumentException
352: dup
353: ldc #101 // String This class has been compiled with a super class which is binary incompatible with the current super class found on classpath. You should recompile this class with the new version.
355: invokespecial #102 // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
358: athrow
359: pop
360: aload_0
361: invokevirtual #106 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
364: astore_3
365: aload_3
366: aload_0
367: swap
368: putfield #108 // Field metaClass:Lgroovy/lang/MetaClass;
371: aload_1
372: astore 4
374: aload 4
376: invokedynamic #111, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)LMessageThread;
381: aload_0
382: swap
383: putfield #113 // Field nextThread:LMessageThread;
386: return
public void run();
Code:
0: aload_0
1: getfield #113 // Field nextThread:LMessageThread;
4: aload_0
5: invokedynamic #123, 0 // InvokeDynamic #2:invoke:(LMessageThread;)Ljava/lang/Object;
10: invokedynamic #128, 0 // InvokeDynamic #3:invoke:(LMessageThread;Ljava/lang/Object;)Ljava/lang/Object;
15: pop
16: goto 0
19: athrow
public void enqueue(java.lang.Integer);
Code:
0: aload_1
1: iconst_0
2: invokestatic #137 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
5: invokestatic #141 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
8: ifeq 33
11: aload_0
12: aload_0
13: invokedynamic #144, 0 // InvokeDynamic #4:invoke:(LMessageThread;)Ljava/lang/Object;
18: invokedynamic #147, 0 // InvokeDynamic #5:invoke:(LMessageThread;Ljava/lang/Object;)Ljava/lang/Object;
23: pop
24: ldc #149 // class java/lang/System
26: iconst_0
27: invokedynamic #154, 0 // InvokeDynamic #6:invoke:(Ljava/lang/Class;I)Ljava/lang/Object;
32: pop
33: aload_1
34: iconst_1
35: invokedynamic #159, 0 // InvokeDynamic #7:invoke:(Ljava/lang/Integer;I)Ljava/lang/Object;
40: astore_2
41: aload_2
42: invokedynamic #162, 0 // InvokeDynamic #1:cast:(Ljava/lang/Object;)Ljava/lang/Integer;
47: aload_0
48: swap
49: putfield #164 // Field message:Ljava/lang/Integer;
52: ldc #166 // class java/util/concurrent/locks/LockSupport
54: aload_0
55: invokedynamic #171, 0 // InvokeDynamic #8:invoke:(Ljava/lang/Class;LMessageThread;)Ljava/lang/Object;
60: pop
61: return
protected groovy.lang.MetaClass $getStaticMetaClass();
Code:
0: aload_0
1: invokevirtual #183 // Method java/lang/Object.getClass:()Ljava/lang/Class;
4: ldc #2 // class MessageThread
6: if_acmpeq 14
9: aload_0
10: invokestatic #187 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
13: areturn
14: getstatic #189 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
17: astore_1
18: aload_1
19: ifnonnull 34
22: aload_0
23: invokevirtual #183 // Method java/lang/Object.getClass:()Ljava/lang/Class;
26: invokestatic #195 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
29: dup
30: astore_1
31: putstatic #189 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
34: aload_1
35: invokevirtual #198 // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
38: areturn
public groovy.lang.MetaClass getMetaClass();
Code:
0: aload_0
1: getfield #108 // Field metaClass:Lgroovy/lang/MetaClass;
4: dup
5: ifnull 9
8: areturn
9: pop
10: aload_0
11: dup
12: invokevirtual #106 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
15: putfield #108 // Field metaClass:Lgroovy/lang/MetaClass;
18: aload_0
19: getfield #108 // Field metaClass:Lgroovy/lang/MetaClass;
22: areturn
public void setMetaClass(groovy.lang.MetaClass);
Code:
0: aload_0
1: aload_1
2: putfield #108 // Field metaClass:Lgroovy/lang/MetaClass;
5: return
public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
Code:
0: aload_0
1: invokevirtual #205 // Method getMetaClass:()Lgroovy/lang/MetaClass;
4: aload_0
5: aload_1
6: aload_2
7: invokeinterface #208, 4 // InterfaceMethod groovy/lang/MetaClass.invokeMethod:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
12: areturn
public java.lang.Object getProperty(java.lang.String);
Code:
0: aload_0
1: invokevirtual #205 // Method getMetaClass:()Lgroovy/lang/MetaClass;
4: aload_0
5: aload_1
6: invokeinterface #213, 3 // InterfaceMethod groovy/lang/MetaClass.getProperty:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
11: areturn
public void setProperty(java.lang.String, java.lang.Object);
Code:
0: aload_0
1: invokevirtual #205 // Method getMetaClass:()Lgroovy/lang/MetaClass;
4: aload_0
5: aload_1
6: aload_2
7: invokeinterface #218, 4 // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
12: return
public MessageThread getNextThread();
Code:
0: aload_0
1: getfield #113 // Field nextThread:LMessageThread;
4: areturn
public void setNextThread(MessageThread);
Code:
0: aload_0
1: aload_1
2: putfield #113 // Field nextThread:LMessageThread;
5: return
public java.lang.Integer getMessage();
Code:
0: aload_0
1: getfield #164 // Field message:Ljava/lang/Integer;
4: areturn
public void setMessage(java.lang.Integer);
Code:
0: aload_0
1: aload_1
2: putfield #164 // Field message:Ljava/lang/Integer;
5: return
public void super$2$run();
Code:
0: aload_0
1: invokespecial #227 // Method java/lang/Thread.run:()V
4: return
}
Compiled from "threadring.groovy"
public class MessageThread extends java.lang.Thread implements groovy.lang.GroovyObject {
public static transient boolean __$stMC;
public MessageThread(MessageThread, int);
Code:
0: aload_0
1: iload_2
2: invokestatic #25 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
5: ldc #27 // class java/lang/String
7: invokestatic #33 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.asType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
10: checkcast #27 // class java/lang/String
13: invokespecial #36 // Method java/lang/Thread."<init>":(Ljava/lang/String;)V
16: aload_0
17: invokevirtual #40 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
20: astore_3
21: aload_3
22: aload_0
23: swap
24: putfield #42 // Field metaClass:Lgroovy/lang/MetaClass;
27: aload_1
28: astore 4
30: aload 4
32: aload_0
33: swap
34: putfield #44 // Field nextThread:LMessageThread;
37: return
public void run();
Code:
0: aload_0
1: getfield #44 // Field nextThread:LMessageThread;
4: aload_0
5: invokespecial #53 // Method dequeue:()Ljava/lang/Integer;
8: invokevirtual #57 // Method enqueue:(Ljava/lang/Integer;)V
11: goto 0
14: return
public void enqueue(java.lang.Integer);
Code:
0: aload_1
1: iconst_0
2: invokestatic #25 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
5: invokestatic #61 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.compareEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
8: ifeq 26
11: aload_0
12: aload_0
13: checkcast #2 // class MessageThread
16: invokevirtual #65 // Method getName:()Ljava/lang/String;
19: invokestatic #71 // Method org/codehaus/groovy/runtime/DefaultGroovyMethods.println:(Ljava/lang/Object;Ljava/lang/Object;)V
22: iconst_0
23: invokestatic #77 // Method java/lang/System.exit:(I)V
26: aload_1
27: iconst_1
28: invokestatic #25 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
31: invokestatic #83 // Method org/codehaus/groovy/runtime/dgmimpl/NumberNumberMinus.minus:(Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
34: astore_2
35: aload_2
36: ldc #21 // class java/lang/Integer
38: invokestatic #86 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.castToType:(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
41: checkcast #21 // class java/lang/Integer
44: aload_0
45: swap
46: putfield #88 // Field message:Ljava/lang/Integer;
49: aload_0
50: invokestatic #94 // Method java/util/concurrent/locks/LockSupport.unpark:(Ljava/lang/Thread;)V
53: return
protected groovy.lang.MetaClass $getStaticMetaClass();
Code:
0: aload_0
1: invokevirtual #105 // Method java/lang/Object.getClass:()Ljava/lang/Class;
4: ldc #2 // class MessageThread
6: if_acmpeq 14
9: aload_0
10: invokestatic #109 // Method org/codehaus/groovy/runtime/ScriptBytecodeAdapter.initMetaClass:(Ljava/lang/Object;)Lgroovy/lang/MetaClass;
13: areturn
14: getstatic #111 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
17: astore_1
18: aload_1
19: ifnonnull 34
22: aload_0
23: invokevirtual #105 // Method java/lang/Object.getClass:()Ljava/lang/Class;
26: invokestatic #117 // Method org/codehaus/groovy/reflection/ClassInfo.getClassInfo:(Ljava/lang/Class;)Lorg/codehaus/groovy/reflection/ClassInfo;
29: dup
30: astore_1
31: putstatic #111 // Field $staticClassInfo:Lorg/codehaus/groovy/reflection/ClassInfo;
34: aload_1
35: invokevirtual #120 // Method org/codehaus/groovy/reflection/ClassInfo.getMetaClass:()Lgroovy/lang/MetaClass;
38: areturn
public groovy.lang.MetaClass getMetaClass();
Code:
0: aload_0
1: getfield #42 // Field metaClass:Lgroovy/lang/MetaClass;
4: dup
5: ifnull 9
8: areturn
9: pop
10: aload_0
11: dup
12: invokevirtual #40 // Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
15: putfield #42 // Field metaClass:Lgroovy/lang/MetaClass;
18: aload_0
19: getfield #42 // Field metaClass:Lgroovy/lang/MetaClass;
22: areturn
public void setMetaClass(groovy.lang.MetaClass);
Code:
0: aload_0
1: aload_1
2: putfield #42 // Field metaClass:Lgroovy/lang/MetaClass;
5: return
public java.lang.Object invokeMethod(java.lang.String, java.lang.Object);
Code:
0: aload_0
1: invokevirtual #125 // Method getMetaClass:()Lgroovy/lang/MetaClass;
4: aload_0
5: aload_1
6: aload_2
7: invokeinterface #130, 4 // InterfaceMethod groovy/lang/MetaClass.invokeMethod:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
12: areturn
public java.lang.Object getProperty(java.lang.String);
Code:
0: aload_0
1: invokevirtual #125 // Method getMetaClass:()Lgroovy/lang/MetaClass;
4: aload_0
5: aload_1
6: invokeinterface #135, 3 // InterfaceMethod groovy/lang/MetaClass.getProperty:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
11: areturn
public void setProperty(java.lang.String, java.lang.Object);
Code:
0: aload_0
1: invokevirtual #125 // Method getMetaClass:()Lgroovy/lang/MetaClass;
4: aload_0
5: aload_1
6: aload_2
7: invokeinterface #140, 4 // InterfaceMethod groovy/lang/MetaClass.setProperty:(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
12: return
public MessageThread getNextThread();
Code:
0: aload_0
1: getfield #44 // Field nextThread:LMessageThread;
4: areturn
public void setNextThread(MessageThread);
Code:
0: aload_0
1: aload_1
2: putfield #44 // Field nextThread:LMessageThread;
5: return
public java.lang.Integer getMessage();
Code:
0: aload_0
1: getfield #88 // Field message:Ljava/lang/Integer;
4: areturn
public void setMessage(java.lang.Integer);
Code:
0: aload_0
1: aload_1
2: putfield #88 // Field message:Ljava/lang/Integer;
5: return
}