Bem galera, não estou consegui entender porque o método run synchonized não está bloqueando uma outra thread de acessa-lo enquanto tem executando-o.
Meu raciocínio foi esse:
Quando crio duas Thread t1, t2 = new Thread() e passo meu destino o método sincroniza legal. No entando se eu crio duas intâncias que estendem uma Thread e passo o meu destino para as duas o método não é sincronizado. Por que ?
public class Testing123 extends Thread
{
String name;
static Thread t1;
static Thread t2;
public Testing123(Runnable r, String name)
{
super(r, name);
}
public Testing123(String name)
{
this.name = name;
}
public static void main(String... args)
{
Testing123 tdestino = new Testing123("Testing123");
t1 = new Testing123(tdestino, "Testing1" );
t2 = new Testing123(tdestino, "Testing2");
t1.start();
t2.start();
}
public synchronized void run()
{
try
{
System.out.println(this);
String name = Thread.currentThread().getName();
System.out.println(name + " iniciando método run!");
if(name.equals("Testing1"))
{
System.out.println(name + " deixando de executar!");
// t2.join();
}
Thread.sleep(2000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
String name = Thread.currentThread().getName();
System.out.println(name + " finalizando método run!");
}
}