Как обычно, мы используем Syncronization так:на другой синхронизация класса
Class A{
public void method1{
syncronized(this){
}
}
public void method2{
syncronized(this){
}
}
}
Когда-нибудь, я нашел такой код:
Class B{
public void method3{
syncronized(B.class){ //class level lock but lock itself
}
}
}
Class C{
public void method4{
syncronized(B.class){/class level lock but lock other class
}
}
}
Как и в класс C указывает, что использовать B. класса в качестве монитора. Предполагая наличие двух потоков t1 и t2 доступа к экземпляру класса C C1, а поток t3 доступа к экземпляру класса B B1, есть ли какой-либо эффект для включения B1 или класса B, когда t1 обращается к C1? - роль B.class, просто монитор, подобный «этому» в классе B?
Я бы предположил, что это артефакт для копирования/вставки. Класс C, вероятно, был создан путем копирования класса B, его переименования и удаления B-специфического материала. – sisyphus
@sisyphus № это правильный код. В качестве примера рассмотрим проблему. – lawrence
Мы не «обычно» используем синхронизацию, как показано в первом коде. Ошибочно вручную синхронизировать на 'this' вместо того, чтобы сделать метод' synchronized'. Второй пример, с другой стороны, - плохое и подверженное ошибкам программирование. – Kayaman