The "synchronized" keyword in Java allows defining critical sections of code, where shared resources must only be accessed by one thread at a time.
Since Java 5, several alternative ways of handling shared resources have sprung up, such as atomic references and map operations, backed by modern CAS operations in modern hardware.
But ultimately, new deployment environments such as kubernetes which achieve resiliency by having redundant load-balanced processes, have render this keyword obsolete, since the lock provided by it is only effective inside one JVM process.