How the Java virtual machine performs thread synchronization
The last in a series on Java bytecode, this article covers threads, shared data, locks, and more!
By Bill Venners, JavaWorld.com, 07/01/97
- Digg
- Reddit
- SlashDot
- Stumble
- del.icio.us
- Technorati
- dzone
Page 2 of 2
Here is the bytecode sequence generated by the reverseOrder() method of the KitchenSync class.
Note that a catch clause ensures the locked object will be unlocked even if an exception is thrown from within the synchronized
block. No matter how the synchronized block is exited, the object lock acquired when the thread entered the block definitely
will be released.
Synchronized methods
To synchronize an entire method, you just include the synchronized keyword as one of the method qualifiers, as in:
class HeatSync {
private int[] intArray = new int[10];
synchronized void reverseOrder() {
int halfWay = intArray.length / 2;
for (int i = 0; i < halfWay; ++i) {
int upperIndex = intArray.length - 1 - i;
int save = intArray[upperIndex];
intArray[upperIndex] = intArray[i];
intArray[i] = save;
}
}
}
The JVM does not use any special opcodes to invoke or return from synchronized methods. When the JVM resolves the symbolic
reference to a method, it determines whether the method is synchronized. If it is, the JVM acquires a lock before invoking
the method. For an instance method, the JVM acquires the lock associated with the object upon which the method is being invoked.
For a class method, it acquires the lock associated with the class to which the method belongs. After a synchronized method
completes, whether it completes by returning or by throwing an exception, the lock is released.
About the author
Bill Venners has been writing software
professionally for 12 years. Based in Silicon Valley, he provides
software consulting and training services under the name Artima Software Company. Over the
years he has developed software for the consumer electronics,
education, semiconductor, and life insurance industries. He has
programmed in many languages on many platforms: assembly language
on various microprocessors, C on Unix, C++ on Windows, Java on the
Web. He is author of the book: Inside the
Java Virtual Machine, published by McGraw-Hill.
Next month
Now that I have gone through the entire bytecode instruction set, I will be broadening the scope of this column to include
various aspects or applications of Java technology, not just the Java virtual machine. Next month, I'll begin a multi-part
series that gives an in-depth overview of Java's security model.
- Digg
- Reddit
- SlashDot
- Stumble
- del.icio.us
- Technorati
- dzone
Resources
- The book The Java virtual machine Specification (http://www.aw.com/cp/lindholm-yellin.html), by Tim Lindholm and Frank Yellin (ISBN 0-201-63452-X), part of The Java Series (http://www.aw.com/cp/javaseries.html), from Addison-Wesley, is the definitive Java virtual machine reference.
- Previous "Under The Hood" articles:
- "The Lean, Mean Virtual Machine" Gives an introduction to the Java virtual machine.
- "The Java Class File Lifestyle" Gives an overview to the Java class file, the file format into which all Java programs are compiled.
- "Java's Garbage-Collected Heap" Gives an overview of garbage collection in general and the garbage-collected heap of the Java virtual machine in particular.
- "Bytecode Basics" Introduces the bytecodes of the Java virtual machine, and discusses primitive types, conversion operations, and stack operations
in particular.
- "Floating Point Arithmetic" Describes the Java virtual machine's floating-point support and the bytecodes that perform floating point operations.
- "Logic and Arithmetic" Describes the Java virtual machine's support for logical and integer arithmetic, and the related bytecodes.
- "Objects and Arrays" Describes how the Java virtual machine deals with objects and arrays, and discusses the relevant bytecodes.
- "Exceptions" Describes how the Java virtual machine deals with exceptions, and discusses the relevant bytecodes.
- "Try-Finally" Describes how the Java virtual machine implements try-finally clauses, and discusses the relevant bytecodes.
- "Control Flow" Describes how the Java virtual machine implements control flow and discusses the relevant bytecodes.
- "The Architecture of Aglets" Describes the inner workings of Aglets, IBM's autonomous Java-based software agent technology.
- "The Point of Aglets" Analyzes the real-world utility of mobile agents such as Aglets, IBM's autonomous Java-based software agent technology.
- "Method Invocation and Return" Explains how the Java virtual machine invokes and returns from methods, including the relevant bytecodes.
Good article. Keep doing good work!!By Anonymous on September 23, 2009, 7:45 amGood article. Keep doing good work!!
Reply | Read entire comment
Threads intimateBy Anonymous on November 12, 2008, 3:12 pmThe article is really concise and useful. Gives an indepth understanding in simple terms.
Reply | Read entire comment
View all comments