|
Betrete den Monitor für ein bestimmtes Objekt (Synchronisation nebenläufiger Prozesse).
Um nebenläufige Prozesse synchronisieren zu können wird in Java das Konzept
des Monitors verwendet. Innerhalb eines Java-Quelltextes kann
die Der Compiler erzeugt für eine Beispiel: Das folgende Beispielprogramm enthält die statische Variable public class Test extends Thread {
static int a = 0;
public void run() { public void run();
Code:
Class clazz = this.getClass(); 0: aload_0
1: invokevirtual #2; //Method java/lang/
Object.getClass:()Ljava/lang/Class;
4: astore_1
while (a < 1000) { 5: getstatic #3; //Field a:I
8: sipush 1000
11: if_icmpge 48
synchronized (clazz) { 14: aload_1
15: dup
16: astore_2
17: monitorenter
a++; 18: getstatic #3; //Field a:I
21: iconst_1
22: iadd
23: putstatic #3; //Field a:I
System.out.println(a); 26: getstatic #4; //Field java/lang/
System.out:Ljava/io/PrintStream;
29: getstatic #3; //Field a:I
32: invokevirtual #5; //Method java/io/
PrintStream.println:(I)V
35: aload_2
} 36: monitorexit
37: goto 45
40: astore_3
41: aload_2
42: monitorexit
43: aload_3
44: athrow
} 45: goto 5
} 48: return
Exception table:
from to target type
18 37 40 any
40 43 40 any
public static void
main(String[] args) {
Thread t1 = new Test();
Thread t2 = new Test();
t1.start();
t2.start();
}
}Die Anweisung
Verlasse den Monitor für ein bestimmtes Objekt (Synchronisation nebenläufiger Prozesse).
Siehe dazu die Beschreibung und das Beispiel von
Erzeuge ein neues mehrdimensionales Array.
Mit Hilfe der vorzeichenlosen Bytes indexbyte1 und
indexbyte2 wird ein Index im (Laufzeit-)Konstantenpool der
aktuellen Klasse berechnet: (indexbyte1 << 8) |
indexbyte2. Durch die Konstante bei diesem Index kann der
Felddeskriptor erhalten werden, der den Typ des mehrdimensionalen Arrays beschreibt
(z.B. Beispiel: int[][] i1 = new int[2][2]; 0: iconst_2
1: iconst_2
2: multianewarray #2, 2; //class "[[I"
6: astore_1
i1[0][1] = 3; 7: aload_1
8: iconst_0
9: aaload
10: iconst_1
11: iconst_3
12: iastore
Integer[][] i2 = new Integer[4][4]; 13: iconst_4
14: iconst_4
15: multianewarray #3, 2;
//class "[[Ljava/lang/Integer;"
19: astore_2
i2[2][3] = new Integer(4); 20: aload_2
21: iconst_2
22: aaload
23: iconst_3
24: new #4; //class java/lang/Integer
27: dup
28: iconst_4
29: invokespecial #5; //Method java/lang/
Integer."<init>":(I)V
32: aastore |
|||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||