Просто запишите, как использовать ключевое слово Synchronized в Java.
Перед введением необходимо уточнить, что каждый экземпляр объекта класса в Java имеет и имеет только одну связанную с ним блокировку (lock). Ключевое слово Synchronized действует только на эту блокировку, то есть можно считать, что синхронизировано только. влияет на экземпляры объекта эффекта Java.
синхронизированная модифицированная функция
Скопируйте код кода следующим образом:
общедоступный синхронизированный aMethod(){
}
Это наиболее часто используемый сценарий. Какова цель этого метода синхронизации? Для удобства он называется методом Метод.
1. Какие синхронизированные блокировки представляет собой экземпляр объекта, вызывающий этот метод синхронизации. Например, синхронизация произойдет, когда один и тот же экземпляр P1 вызывает метод в разных потоках;
2. Следует отметить, что другой объект P2 класса, к которому принадлежит этот объект, может вызывать этот метод произвольно, поскольку синхронизированные методы разных экземпляров объекта не мешают друг другу. Другими словами, другие потоки по-прежнему могут одновременно обращаться к методу aMethod в другом экземпляре объекта того же класса;
3. Если объект имеет несколько синхронизированных методов, таких как aMethod, bMethod и cMethod, теперь, пока один поток обращается к одному из синхронизированных методов, другие потоки не могут одновременно получить доступ ни к одному синхронизированному методу в объекте.
Приведенный выше код фактически эквивалентен следующему:
Скопируйте код кода следующим образом:
общественный недействительный aMethod() {
синхронизировано (это) {
}
}
Здесь это относится к ссылке на объект экземпляра, например P1. Видно, что суть метода синхронизации заключается в применении синхронизации к ссылке на объект. Только поток, получивший блокировку объекта P1, может вызвать метод синхронизации P1. Что касается P2, то блокировка P1 не имеет к этому никакого отношения. Программа также может избавиться от управления механизмом синхронизации. ситуация, вызывающая путаницу в данных. Из этого мы получаем блок синхронизации ниже.
синхронизированный модифицированный блок кода
Скопируйте код кода следующим образом:
public void dMethod(SomeObject so) {
синхронизировано(так) {
}
}
Блокировка, полученная здесь с помощью синхронизации, является блокировкой объекта so, поэтому тот, кто получит блокировку, сможет запустить код, которым он управляет. Когда в качестве блокировки есть явный объект, вы можете написать программу так, но когда в качестве блокировки нет явного объекта и вы просто хотите синхронизировать фрагмент кода, вы можете создать специальную переменную экземпляра (она должна быть объект), который будет действовать как замок:
Скопируйте код кода следующим образом:
класс Foo реализует Runnable {
частный байт [] блокировка = новый байт [0];
Публичный метод void() {
синхронизировано (блокировка) {
}
}
}
Создание объекта массива байтов нулевой длины будет более рентабельным, чем создание любого другого объекта.
синхронизированный модифицированный статический метод
Как упоминалось ранее, ключевое слово Synchronized допустимо только для экземпляров P1 в разных потоках. Так как же оно может быть допустимо для разных экземпляров P1 и P2 одновременно? Ответ — использовать синхронизированные методы для изменения статических методов. Можно сказать, что класс принадлежит этому классу. Он не зависит от экземпляров класса, поэтому нам нужно использовать только ключевое слово Synchronized, чтобы изменить статические методы класса для достижения синхронизации между различными экземплярами.