Galera só pra eu entender,
eu tenho um metodo que modifica o valor de variavel estatica(que sofre concorrencia).
O modificador synchronized garante que o metodo será executado até o final sem que seja interrompido???
vlwss
Galera só pra eu entender,
eu tenho um metodo que modifica o valor de variavel estatica(que sofre concorrencia).
O modificador synchronized garante que o metodo será executado até o final sem que seja interrompido???
vlwss
metodo estatico neh?!
Ele garante que duas threads naum vaum executar o metodo juntas.
Mas isso naum quer dizer que o sistema vai executar a thread de uma soh vez, sem poder executar outras threads que naum acessem esse metodo, ele pode executar ateh metade do metodo, parar, executar um pouco a outra thread, depois voltar e continuar executando a primeira
Faz o teste, perceba que vai aparecer ‘outro’ e ‘syn’ intercalados
public class Teste {
public synchronized void metodo() {
for(int i = 0; i < 100000; i++) {
if(i % 50 == 0)
System.out.println("syn " + i);
}
}
public static void main(String[] args) {
final Teste t = new Teste();
Runnable r1 = new Runnable() {
public void run() {
t.metodo();
}
};
Runnable r2 = new Runnable() {
public void run() {
for(int i = 0; i < 100000; i++)
if(i % 50 == 0)
System.out.println("outro " + i);
}
};
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
}
}