It seems to me that this will make the implementation far less useful as
a vehicle for running existing Java code, or code you also want to run
on other implementations. There is lots of code out there that uses
arbitrary Objects for synchronization, e.g. by explicitly allocating a
lock with "new Object()". And I think code that now synchronizes on
something like strings would need significant changes. If I got to
redesign the language, I might agree with you, at least with respect to
synchronization. But the cost of such a redesign, in terms of broken
client code, strikes me as huge.