Класс имеет статический метод и нестатический метод, которые синхронизированы. Два потока пытаются получить доступ к этим методам, смогут ли они это сделать? есть ли какой-либо замок? какой тип замка?Синхронизация для статических и нестатических методов
ответ
При использовании слова synchronized
по методу вы фактически блокируете this
, например, метод и сам класс статического метода.
Например:
public class MyClass {
public synchronized void foo1() {}
public synchronized void foo2() {}
}
В этом примере, только один поток может ввести foo1()
или foo2()
одного и того же экземпляра. Так что, если у нас есть что-то вроде этого:
MyClass instance1 = new MyClass();
MyClass instance2 = new MyClass();
Так что возможно за нить, чтобы быть в foo1()
для instance1
в то время как другой поток в foo1()
из instance2
. Но невозможно, чтобы 2 нити вводили foo1
от instance1
Иfoo2
на instance1
. Потому что они оба блокируются, используя this
.
То же самое касается статического метода, но вместо этого они блокируют сам класс. Значение - один поток может ввести статический метод synchronized
в определенной точке.
Они будут синхронизированы, но на разных объектах, и, следовательно, не будет защиты от их обоих одновременно работающих.
Метод экземпляра синхронизируется по экземпляру объекта, а статический метод синхронизируется с объектом класса.
Если вы хотите, чтобы общая синхронизация между ними использовала общий объект блокировки в синхронизированных предложениях. Например, вы можете синхронизировать оба объекта класса.
- 1. синхронизированные блоки для статических и нестатических методов
- 2. Синтаксис Java для статических и нестатических методов
- 3. Java - синхронизация статических методов
- 4. Вызов страниц ASP.NET для нестатических методов из статических веб-методов
- 5. android jni от статических до нестатических методов
- 6. Ошибка статических и нестатических
- 7. О статических и нестатических методах
- 8. Использование :: для нестатических методов?
- 9. различение статических и нестатических методов в C++ во время компиляции?
- 10. Вызов нестатических методов в java
- 11. Разница статических и нестатических внутренних классов?
- 12. Статические методы против нестатических методов
- 13. Явная инициализация Java для нестатических методов?
- 14. Рабочий класс. Метод для нестатических классов/методов
- 15. Gmock для статических методов
- 16. Синхронизация потоков для методов?
- 17. Проверка нестатических методов в Rspec?
- 18. Необходимо использовать экземпляр в статических и нестатических методах
- 19. Вопросы о статических методов и стек вызовов
- 20. Длительность нестатических данных в статических функциях
- 21. Объем нестатических переменных в статических объектах
- 22. Какова цель защищаемого модификатора для статических методов
- 23. Как избежать ошибки «вызов является неоднозначной ...» при написании статических и нестатических методов в C#?
- 24. синхронизация для методов get и set
- 25. Критерии для статических методов Java?
- 26. Ограничения типа для статических методов
- 27. Десятичное форматирование для статических методов
- 28. О статических и нестатических блоках инициализации в Java
- 29. doAnswer для статических методов - PowerMock
- 30. Использование статических не-членных и нестатических переменных-членов в C++
Прямо сейчас непонятно, что вы просите. Похоже, это Java? Добавьте этот тег. Также исправьте свою грамматику, а затем, наконец, добавьте свой код. – AndyG