Sincronização de Threads

1 resposta
S

Olá sei que o assunto é batido aqui na lista e também sei que existem vários artigos na internet sobre a utilização do synchronized entre metodos de thread. Tenho as seguintes classes como exemplo:

package testeJavaThread;

public class TNomes extends Thread{

	private String nome;
	
	public void run() {
		while (true) {
			.....
		}
	}
	
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public String getNome() {
		return this.nome;
	}
}

package testeJavaThread;

import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;

public class T1 extends Thread {

	private BlockingDeque<String> nomesList;
	private TNomes tnomes;
	private String nome;
	
	public T1 (TNomes tnomes) {
		this.tnomes = tnomes;
		this.nomesList = new LinkedBlockingDeque<String>();

	}
	
	public void run() {
		while (true) {
			try {
				this.nome = this.nomesList.take();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			this.tnomes.setNome(this.processaNome(this.nome));
		}
	}
	
	public String processaNome(String nome){
		.....
		return nome;
	}
	
	public void addList(String nome) {
		try {
			this.nomesList.put(nome);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

package testeJavaThread;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TNomes tnomes = new TNomes();
		tnomes.start();
		
		T1 t1 = new T1(tnomes);
		t1.start();
		t1.addList("NOMEALUNO");
	}

}

Ambas as threads T1 e TNomes trabalham com os métodos setNome e getNome da classe TNomes, sendo assim, eu somente gostaria de saber se ambos os métodos devem utiliza o synchronized.

POR FAVOR alguem poderia me auxiliar nesta dúvida? Se devo ou não utilziar o synchronized em ambos os metodos.

OBRIGADO.

1 Resposta

ViniGodoy

Sim. Sempre que uma variável sendo escrita for compartilhada entre duas threads, você vai precisar do synchronized.

Criado 30 de janeiro de 2013
Ultima resposta 30 de jan. de 2013
Respostas 1
Participantes 2