同期されたブロックについての説明を探しています。このクラスを検討してください-
public class A{
Map map;
public getValue(String key){
return map.get(key);
}
public remove(String key){
synchronized(map){
map.remove(key);
}
}
}
Aはシングルトンです。getValueは、複数のスレッドによってアプリ全体で頻繁にアクセスされます。マップからキーを削除する新しいメソッドremoveを追加しています。上記のようにremoveが実装されている場合、
- スレッドがremoveメソッドの同期ブロックにある場合、マップオブジェクトのロックを取得すると思います。これは、getValueメソッドを介してマップにアクセスしようとしている他のスレッドがブロックされることを意味しますか?(お願いします。)
- removeメソッドの同期ブロックにスレッドがない場合、getValueメソッドにアクセスするスレッドは通常どおり機能しますか?つまり、互いにブロックしませんか?(私もそれが欲しいです)。
削除操作を実行しているスレッドがある場合にのみ、getValueスレッドをブロックしたいと思います。