Modificador synchronized

1 resposta
S

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

1 Resposta

L

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();
	}
	
}
Criado 18 de setembro de 2007
Ultima resposta 18 de set. de 2007
Respostas 1
Participantes 2