Back around JDK 1.2 or so, there were some performance differences between the two - even though I agree, they should be exactly the same. Nonetheless they were compiled to different bytecodes, and optimized differently in the JVM. Don't know why. I haven't cared enough to test since then, but I would guess that any significant performance differences may well have been erased since then. Or maybe not.
Either way, I don't recommend worrying about such performance differences unless and until you have an observable performance problem, and can verify that it makes a difference. Other considerations are usually more important.
With synchronized methods, the thread will have the lock of 'this' object only. But by using synchronized block we can pass any object as the parameter and lock of that particular object will be given to thread.
Last time I looked the method level one set the ACC_SYNCHRONIZED flag and the other (block one) added the relevant monitor byte code, soo just on the basis the first has less code it should be more efficient if probably unmeasurable ;-) the only thing that did occur is how well the various Java 5-6 lock optimisations would code with the block version or not as it would seem to be easier to optimise with the method level version maybe (can't really back that up ;-) )
As everyone else has pointed out block level ones can be more efficient but the method levels ones are easier to read and simpler to use, seen soo much newbie code were they've shot themselves in the foot with happens before ordering etc by trying to get clever with block scope when the difference between that and method scope would have been negligible.
"Eagles may soar but weasels don't get sucked into jet engines" SCJP 1.6, SCWCD 1.4, SCJD 1.5,SCBCD 5
Men call me Jim. Women look past me to this tiny ad:
Building a Better World in your Backyard by Paul Wheaton and Shawn Klassen-Koop