静的変数とメソッドは、インスタンス (オブジェクト) ではなくクラスに属します。通常、それらはclassName.staticMethod()またはclassName.staticVariableを使用してアクセスされますが、 classInstance.staticMethod()やclassInstance.staticVariableなどのクラス インスタンスを使用してアクセスまたは呼び出すこともできます。
私の最初の質問は
そもそもクラスインスタンスを介した静的メソッド/関数へのアクセスを許可するのはなぜですか? ユースケースはありますか?
次の質問は次のとおりです。次のクラスを考えてください
public class Counter{
private static int count = 0;
public static synchronized int getCount()
{
return count;
}
public synchronized setCount(int count)
{
this.count = count;
}
}
これらの関数が以下のように呼び出される場合、マルチスレッド環境で
Counter myCounter = new Counter();
myCounter.setCount(10);
System.out.println(myCounter.getCount());
2問目は
両方の関数が別々のロックを持っているか、同じロックを持っていますか (両方とも myCounter オブジェクトによって呼び出されることを考慮して)? スレッド処理の静的メソッドがまだクラスレベルのロックを取得している場合、どのロックを取得する必要があるかを内部的にどのように把握しますか?