开发者

How exclusion is achieved using monitor in java

开发者 https://www.devze.com 2023-03-26 21:02 出处:网络
So Java supports object l开发者_开发技巧evel monitors. So when we create an instance of a class basically we are creating different objects. Now, consider a scenario in which there is a shared data a

So Java supports object l开发者_开发技巧evel monitors. So when we create an instance of a class basically we are creating different objects. Now, consider a scenario in which there is a shared data accessed by the all the instances of the object through a method in the object.

Please let me know how the keyword synchronized makes it possible to achieve thread safety in this case because i have different instances (objects) of the same class.


In that case you would synchronize on the object which is the data you are accessing.

So, if you have 100 instances of Foo all accessing a piece of data, that data has a single reference. Lets call that reference Bar. Then all your Foos would access Bar while synchronizing on it.

void changeBar(){
  synchronized(bar){
    //insert logic here
  }
}


If all instances of the class are accessing a piece of data, you might be using a static members:

public class Foo {
  private static Object shared;

  public static void accessShared() { /* code */ }
}

In that case, you can make the static method synchronized:

public class Foo {
  private static Object shared;

  public static synchronized void accessShared() { /* code */ }
}

This is equivalent to the code:

public class Foo {
  private static Object shared;

  public static void accessShared() { 
    synchronized (Foo.class) { /* code */ }
  }
}

Remember, Foo.class is itself an object, and hence has a monitor associated with it.

0

精彩评论

暂无评论...
验证码 换一张
取 消