class ThreadSafeClass extends Thread
{
private static int count = 0;
public synchronized static void increment()
{
count++;
}
public synchronized void decrement()
{
count--;
}
}
Alguém pode explicar por que a classe acima não é thread-safe?
synchronized
deve ser usado apenas em métodos estáticos. Portanto, em minha opinião, mesmo que você remova o increment
método, ele ainda não é thread-safe, pois duas instâncias (que têm apenas acesso sincronizado por meio da mesma instância) podem chamar o método simultaneamente.
increment
), seria thread-safe. Ou se você usou algum objeto de bloqueio. Como eu disse, não sei sobre Java - meu comentário vem do conhecimento de C #.