Дело 1
У меня есть 2 синхронизированных метода, как показано ниже:
class A {
public void synchronized methodA() {}
public void synchronized methodB() {}
}
A: У меня есть темы T1 и T2. Могут ли потоки одновременно выполнять methodA
и methodB
(соответственно), принадлежащие тому же экземпляру класса A?
- Мой анализ: Ответ нет , поскольку потоком T1 будет выполняться только один метод, а поток T2 будет блокироваться до тех пор, пока T1 не завершит выполнение.
B: У меня есть темы T1 и T2. Могут ли потоки одновременно выполнять methodA
и methodB
(соответственно), принадлежащие различным экземплярам класса A?
- Мой анализ: Ответ да , потому что T1 и T2 могут выполнять
methodA
и methodB
, принадлежащие разным экземплярам класса A, и они не будут заблокированы.
Правильно ли мое понимание согласно моему анализу для случая 1?
Обновление: дело 2
У меня есть 2 синхронизированных метода, один не статический, а другой статический.
class A {
public void synchronized methodA() {}
public void static synchronized methodB() {}
}
A: У меня есть темы T1 и T2. Могут ли потоки одновременно выполнять methodA
и methodB
(соответственно), принадлежащие тому же экземпляру класса A?
- Мой анализ: Ответ нет , потому что T1 будет выполнять только один метод, а T2 будет блокироваться до тех пор, пока T1 не завершит выполнение.
B: У меня есть темы T1 и T2. Могут ли потоки одновременно выполнять methodA
и methodB
(соответственно), принадлежащие различным экземплярам класса A?
- Мой анализ: Ответ да , потому что T1 и T2 могут выполнять
methodA
и methodB
, принадлежащие разным экземплярам, и они не будут заблокированы.
Правильно ли мое понимание согласно моему анализу для случая 2?