synchronize
メソッドの前にキーワードを使用すると、そのオブジェクトが同期されることを知っています。つまり、オブジェクトの同じインスタンスを実行している2つのスレッドが同期されます。
ただし、同期はオブジェクトレベルであるため、オブジェクトの異なるインスタンスを実行する2つのスレッドは同期されません。メソッドによって呼び出されるJavaクラスに静的変数がある場合、クラスのインスタンス間でそれを同期させる必要があります。2つのインスタンスは2つの異なるスレッドで実行されています。
次の方法で同期を達成できますか?
public class Test
{
private static int count = 0;
private static final Object lock= new Object();
public synchronized void foo()
{
synchronized(lock)
{
count++;
}
}
}
lock
静的なオブジェクトを定義し、synchronized
そのロックにキーワードを使用しているため、静的変数count
がクラスのインスタンス間で同期されているのは本当Test
ですか?