Как исключение достигается с помощью монитора в Java - PullRequest
0 голосов
/ 09 августа 2011

Так что Java поддерживает мониторы уровня объекта.Поэтому, когда мы создаем экземпляр класса, мы создаем разные объекты.Теперь рассмотрим сценарий, в котором есть общие данные, к которым получают доступ все экземпляры объекта через метод объекта.

Пожалуйста, дайте мне знать, как синхронизированное ключевое слово позволяет достичь безопасности потока в этом случае, потому что у меня разные экземпляры (объекты) одного и того же класса.

Ответы [ 2 ]

2 голосов
/ 09 августа 2011

В этом случае вы синхронизируете объект, который равен данным, к которым вы обращаетесь.

Итак, если у вас есть 100 экземпляров Foo, каждый из которых обращается к части данных, эти данные имеют одну ссылку. Позволяет называть эту ссылку Бар. Тогда все ваши Foos получат доступ к Bar во время синхронизации.

void changeBar(){
  synchronized(bar){
    //insert logic here
  }
}
0 голосов
/ 09 августа 2011

Если все экземпляры класса обращаются к фрагменту данных, вы можете использовать static членов:

public class Foo {
  private static Object shared;

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

В этом случае вы можете сделать метод static synchronized:

public class Foo {
  private static Object shared;

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

Это эквивалентно коду:

public class Foo {
  private static Object shared;

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

Помните, Foo.class сам является объектом, и, следовательно, с ним связан монитор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...