Newsletter sign-up
View all newsletters

Enterprise Java Newsletter
Stay up to date on the latest tutorials and Java community news posted on JavaWorld

Sponsored Links

Optimize with a SATA RAID Storage Solution
Range of capacities as low as $1250 per TB. Ideal if you currently rely on servers/disks/JBODs

A look at the synchronized modifier (6/14/99)

The JavaWorld experts answer your most pressing Java questions -- every week

  • Print
  • Feedback

QWhat does the 'synchronized' modifier for a class declaration do? I see decompilers generating the code and javac compiling it without difficulty. Example:

public synchronized class HelloWorld {}


A synchronized is not a valid modifier for a class. According to the Java Language Specification (JLS 8.1.2, see Resources), public, abstract, and final are the only valid modifiers for a top-level class. Inner classes can also be private, protected, or static. Therefore, the compiler should reject the code in your example. In fact, this is a known bug, fixed in JDK 1.2.

Out of curiosity, we checked to see if the synchronized modifier on a class had any effect in the generated code. We tried compiling a class with several different kinds of methods (abstract, final, static, and so on) with and without the synchronized keyword. The class files generated were exactly the same.

It is also a bug for a decompiler, such as javap, to report classes as being synchronized. In fact, javap claims that every class is synchronized. This bug is also fixed in JDK 1.2. Documentation on these two bugs and others can be found in the Bug Parade on the Java Developer Connection Website. (See Resources below.)

About the author

Random Walk Computing is the largest Java/CORBA consulting boutique in New York, focusing on solutions for the financial enterprise. Known for their leading-edge Java expertise, Random Walk consultants publish and speak about Java in some of the most respected forums in the world.
  • Print
  • Feedback

Resources