Galera tenho uma dúvida aqui, é o seguinte, pensei que essa questão
iria prevenir o acesso simultâneo, porêm não prevenil.
O primeiro Thread vai vim aqui é – new String(“a”), esse thread pega o bloqueio desse 1º objeto.
O segundo thread vem aqui e – new String(“a”) (outro objeto) pega o bloqueio desse objeto,.
Com bloqueios diferentes esses threads podem ser executados ao mesmo tempo correto ?
public class TWorks extends Thread {
public void run() {
synchronized (new String("a")) {
System.out.print("-A-");
System.out.print("-B-");
System.out.print("-C-");
}
}
public static void main(String args[]) {
TWorks tw = new TWorks();
Thread rb1 = new Thread(tw);
Thread rb2 = new Thread(tw);
rb1.start();
rb2.start();
}
}
Se eu mudar esse trecho de código:
synchronized (new String("a")) {
Para:
synchronized ("a") {
Assim resolvo o problema do acesso simultâneo ?! Ao meu ver sim, pois esse objeto String será criando quando a classe
for carregada. E não será criando um outro objeto.
Posso resolver isso também com nomeClass.class, eu sei, mas se eu não quiser usar isso posso usar um objeto específico como
no caso da String citada acima? Ou essa objeto precisa ser static ?!
Estou certo pessoal ?!!?!?!
Grato.