[SCJP] Pool de String e sincronização

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:

[code]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();
}

}[/code]

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.

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

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

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

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