The code in scenario 2 will not even compile. Reason being that you can not refer to "this" in a static method.
In Scenario 1:
The intention of the synchronized block is to make only one
thread enter the synchronized block at any time. Class level lock(using .class as the monitor) is one such way of assuring this.
The other way can be to have some other static final field as the monitor.
Campbell: I can't remember why, but double-checked locking doesn't work.
DCL *was* broken prior to jdk 5. The new JMM has fixed the problem and rendered DCL as thread-safe. However, it still is not recommended as it does not really give much.
Much more detailed explanation and lot of good information in these excellent articles by Brian Goetz:
What is the Java Memory Model, and how was it broken in the first place?
How will the JMM change under JSR 133?