Qual melhor usar ou “quando usar” qual e por que?
volatile int x = 0;
x++;
ou
int x = 0;
synchronized int plus() {
return x++;
}
ou ainda
int x = 0;
synchronized(x) {
x++;
}
O que me dizem?
Eu usaria o volatile pelo que acabo de aprender dele (vide topico sobre obscuridade), apesar do volatile não ser totalmente suportado por todas as JVM’s…
Pelo que aprendi até agora, todas as soluções funcionariam, mas:
Sincronizar o método parece mais lento, afinal voce está tendo o overhead de sincronizacao + o de chamada de método…
Sincronizar a variavel parece viável, apesar de sujar bastante o código (imagina um monte de sincronização no código, fica horrível)…
Criar a variável como volatile parece o mais interessante, já que ela é automaticamente “sincronizada”, pois todas as operações nela ficam atômicas…
Pesquisei um pouco, e pra quem não souber aqui vai o que achei:
É essa aí a descrição de uma operação atômica, que é o que o synchronized e volatile fazem.
E ai, o que dizem sobre as opcoes?
