Eu sei que o uso da synchronize
palavra - chave antes de um método traz sincronização para esse objeto. Ou seja, 2 threads executando a mesma instância do objeto serão sincronizados.
No entanto, como a sincronização está no nível do objeto, 2 threads executando instâncias diferentes do objeto não serão sincronizados. Se tivermos uma variável estática em uma classe Java chamada pelo método, gostaríamos que ela fosse sincronizada entre instâncias da classe. As duas instâncias estão em execução em 2 threads diferentes.
Podemos alcançar a sincronização da seguinte maneira?
public class Test
{
private static int count = 0;
private static final Object lock= new Object();
public synchronized void foo()
{
synchronized(lock)
{
count++;
}
}
}
É verdade que, uma vez que definimos um objeto lock
que é estático e estamos usando a palavra-chave synchronized
para esse bloqueio, a variável estática count
agora está sincronizada entre instâncias da classe Test
?