I have one question in my mind , I read static synchronized method locked on class object
and synchronized method locks on current instance of an object.So Whats the meaning of locked
on class object ?
Can anyone please help me on this topic ?
synchronized methods are used to protect access to resources that are accessed concurrently. When a resource that is being accessed concurrently belongs to each instance of your class, you use a
synchronized instance method; when the resource belongs to all instances (i.e. when it is in a
static variable) then you use a
synchronized static method to access it.
For example, you could make a
static factory method that keeps a "registry" of all objects that it has produced. A natural place for such registry would be a
static collection. If your factory is used from multiple threads, you need to make the factory method
synchronized (or have a
synchronized block inside the method) to protect access to the shared
Note that using
synchronized without a specific lock object is generally not the safest choice when you are building a library to be used in code written by others. This is because malicious code could synchronize on your object or a class to block your own methods from executing. To protect your code against this, create a private "lock" object, instance or static, and synchronize on that object instead.