В этой статье представлены некоторые знания о синхронизированных ключевых словах в многопользовательском многопользовательстве Java как блокировки объектов.
Так называемая блокировка объекта означает синхронизированный для блокировки определенного объекта. Для справки, пожалуйста, см. В этой статье
1. Анализ
Синхронизированный может изменить метод экземпляра следующим образом:
открытый класс myObject {синхронизированный public void methoda () {// что -то ....}Здесь синхронизированное ключевое слово блокирует текущий объект. Это также называется блокировкой объекта.
Зачем блокировать текущий объект? Поскольку Methoda () является методом экземпляра, если вы хотите выполнить MethodA (), вам нужно вызвать его в форме объекта. method () (obj.methoda (), obj является объектом класса MyObject, синхронизированные средства блокировки объекта OBJ).
Приведенный выше код также может быть написан так:
открытый класс myobject {public void methoda () {synchronized (this) {// что -то ...}}}2. Особенности
Очевидной особенностью синхронизированной синхронизации ключевых слов является то, что когда в классе MyObject определяются множественные синхронизированные модифицированные методы экземпляра, если несколько потоков имеют одинаковый объект класса MyObject, эти методы могут выполняться только синхронным образом. То есть после выполнения метода синхронизированной модификации может быть выполнен другой метод синхронизированной модификации.
следующее:
открытый класс myObject {синхронизированный public void methoda () {// что -то сделать ....} Синхронизированный public void methodb () {// Делать что -то еще}}}}}}}В классе MyObject есть два метода синхронизированной модификации.
публичный класс Threada Extends Thread {private MyObject Object; // Опустить конструктор @Override public void run () {super.run (); Object.Methoda (); }}Потока a exection methoda ()
публичный класс ThreatB Extends Thread {private MyObject Object; // Опустите конструктор @Override public void run () {super.run (); object.methodb (); }} Поток B выполняет methodb ()
public class run {public static void main (string [] args) {myObject object = new myObject (); // поток A и поток B Удерживает один и тот же объект: объект Threada a = new Threada (Object); Threatb B = new ThreatB (Object); A.Start (); B.Start (); }}Поскольку поток A и поток B содержит объект объекта одного и того же класса MyObject, хотя эти два потока должны вызывать различные методы, они должны быть синхронизированы. Например, поток B должен ждать потока A, чтобы выполнить метод methoda (), прежде чем он сможет выполнить метод MethodB ().
3. Заключение
Как видно из вышеперечисленного, объем синхронизированного блокировки, описанного в этой статье, является всем объектом. Если в классе есть несколько методов синхронизированных модифицированных синхронизации, а несколько потоков содержит один и тот же объект класса (один и тот же объект класса), хотя они вызывают различные методы, выполнение каждого метода также синхронизируется.
Если между каждым синхронизированным методом нет общих переменных, или между каждым методом нет никакой связи, но это может быть выполнено только синхронно, это повлияет на эффективность.
4.
Следующий пример:
открытый класс myObject {private String username = "b"; Private String Password = "BB"; Синхронизированный public void methoda (string username, string password) {this.username = username; try {thread.sleep (5000); } catch (прерывание Exception e) {} this.password = password; } синхронизированный public void methodb () {System.out.println ("имя пользователя" + имя пользователя + ":" + "пароль" + пароль); }}methoda () отвечает за изменение имени пользователя и пароля. В действительности, имя пользователя соответствует паролю.
methodb () отвечает за чтение имени пользователя и пароля.
Если MethodB () не модифицируется с помощью синхронизации, напротив имя пользователя при вызове MethodA () на строку 7 и по какой -то причине отдает процессор (например, сон в строке 9).
В настоящее время, если поток B выполняет MethodB (), чтение имени пользователя - это имя пользователя, измененное по потоке A («A»), но пароль - исходный пароль («BB»). Потому что поток А спит и не успел изменить пароль.
Однако, если MethodB () изменен с помощью синхронизации, то поток B может ждать только поток A для завершения выполнения (то есть, он изменил имя пользователя и пароль) перед выполнением MethodB для чтения имени пользователя и пароля. Следовательно, грязные проблемы с чтением, вызванные несоответствием в данных, избегаются.
Выше приведено все об этой статье, я надеюсь, что для всех будет полезно изучать программирование Java.