[SCJP] Pool de String e sincronização

4 respostas
G

Olá!

Estava resolvendo um exercício do whizlab e lá diz que se eu utilizar uma String para sincronizar um bloco de código, será possível utilizá-la(a String) em outros objetos que que terei sucesso na sincronização devido ao "pool de Strings".

Dêem uma olhada no código:

class Test implements Runnable {
	public void run() {
		String str = "hello";
		synchronized (str) {
			System.out.print(Thread.currentThread().getName());
			System.out.print(Thread.currentThread().getName());
		}
	}

	public static void main(String[] args) {
		new Thread(new Test(), "A").start();
		new Thread(new Test(), "B").start();
	}
}

A resposta será AABB ou então BBAA
"Trick" muuito interessante!

Mas minha dúvida é a seguinte... Qual o alcance desse pool, ele é válido para a aplicação inteira (quero dizer... vários processos diferentes têm acesso a um mesmo pool)?
E se sim... Quando ele é coletado pelo Garbage Collection(Somente no final da aplicação(tipo... nunca) )?

Abs.
Paulo Gervásio.

4 Respostas

BrunoBastosPJ

Ele é válido para todas as aplicações rodando na JVM. Ele é limpo quando você desliga sua máquina virtual

G

Nossa… e é possível limpar esse pool de tempos em tempos?

ViniGodoy

Não, você não tem qualquer controle sobre o pool de Strings.

ViniGodoy

Mas dê uma lida nesse artigo aqui: http://www.javaworld.com/javaworld/javaqa/2003-12/01-qa-1212-intern.html

Criado 23 de junho de 2010
Ultima resposta 25 de jun. de 2010
Respostas 4
Participantes 3