Они эквивалентны по функциям, хотя протестированные мной компиляторы (Java 1.6.0_07 и Eclipse 3.4) генерируют разные байт-коды. Первый генерирует:
// access flags 33
public synchronized someMethod()V
RETURN
Второй генерирует:
// access flags 1
public someMethod()V
ALOAD 0
DUP
MONITORENTER
MONITOREXIT
RETURN
(Спасибо ASM за печать байт-кода).
Таким образом, разница между ними сохраняется до уровня байт-кода, и JVM должна сделать их поведение таким же. Однако они имеют одинаковый функциональный эффект - см. пример в Спецификации языка Java.
Следует отметить, что если метод переопределен в подклассе, то он не обязательно синхронизирован - поэтому в этом отношении также нет никакой разницы.
Я также выполнил тест, чтобы блокировать поток, пытающийся получить доступ к монитору в каждом случае, чтобы сравнить, как будут выглядеть их трассировки стека в дампе потока, и оба они содержали рассматриваемый метод, поэтому там также нет никакой разницы.