Thread runnable ou blocked

Bonjour,
j'ai essayé ce prg suivante,quand je l'exécute,j'ai un pb avec son output

public class TestThread extends Thread
{
Thread t;
public TestThread(String name)
{
super(name);
System.out.println("status du thread"+name+"="+this.getState());
this.start();
System.out.println("status du thread"+name+"="+this.getState());
}
public TestThread(String name,Thread t)
{
super(name);
this.t=t;
System.out.println("status du thread"+name+"="+this.getState());
this.start();
System.out.println("status du thread"+name+"="+this.getState());
}
public void run()
{
for(int i=0;i<10;i++)
{
System.out.println("status"+this.getName()+"="+this.getState());
if(t!=null)System.out.println("status de"+t.getName()+" pendant le thread"+this.getName()+"="+this.getState());
}
}
public void setThread(Thread t)
{
this.t=t;
}
}

public class Test
{
public static void main(String[]args)
{
TestThread t=new TestThread("A");
TestThread t2=new TestThread("B",t);
try
{
Thread.sleep(1000);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
System.out.println("statut du thread"+t.getName()+"="+t.getState());
System.out.println("statut du thread"+t2.getName()+"="+t2.getState());
}
}
voilà son output

status du threadA=NEW
status du threadA=RUNNABLE
status du threadB=NEW
status du threadB=RUNNABLE
statusA=RUNNABLE
statusA=RUNNABLE
statusA=RUNNABLE
statusA=RUNNABLE
statusB=RUNNABLE
status deApendant le threadB=RUNNABLE
statusB=RUNNABLE
statusA=RUNNABLE
status deApendant le threadB=RUNNABLE
statusB=RUNNABLE
status deApendant le threadB=RUNNABLE
statusA=RUNNABLE
statusB=RUNNABLE
statusA=RUNNABLE
statusA=RUNNABLE
status deApendant le threadB=RUNNABLE
statusA=RUNNABLE
statusB=RUNNABLE
statusA=RUNNABLE
status deA pendant le threadB=RUNNABLE
statusB=RUNNABLE
status deA pendant le threadB=RUNNABLE
statusB=RUNNABLE
status deA pendant le threadB=RUNNABLE
statusB=RUNNABLE
status deA pendant le threadB=RUNNABLE
statusB=RUNNABLE
status deA pendant le threadB=RUNNABLE
statusB=RUNNABLE
status deA pendant le threadB=RUNNABLE
statut du threadA=TERMINATED
statut du threadB=TERMINATED

mon question est pourquoi je n'ai pas réussi avoir blocked
par ex:
status de B=RUNNABLE
status de A pendant le thread B=BLOCKED

Veuillez m'aidez svp

2 réponses

  1. Modérateur
    Tu n'as pas de BLOCKED parce que tu n'as pas de verrou, donc tes deux threads cohabitent très bien en parallèle sans se gêner l'un l'autre.

    Exemple de blocage :

    import java.util.ArrayList;

    public class TestThread extends Thread
    {
    private static ArrayList<Thread> list = new ArrayList<Thread>();

    public TestThread(int n)
    {
    super("T" + n);
    list.add(this);
    }

    @Override
    public void run()
    {
    action(getName());
    }

    private static synchronized void action(String name)
    {
    System.out.println(name + " : START");

    try
    {
    Thread.sleep(100);
    log();
    }
    catch (InterruptedException e)
    {
    }

    System.out.println(name + " : FINISH");
    }

    private static void log()
    {
    for (Thread t : list)
    System.out.println(t.getName() + " : " + t.getState());
    }

    public static void main(String[] args) throws InterruptedException
    {
    for (int i = 1; i <= 3; i++ )
    new TestThread(i);

    log();

    for (Thread t : list)
    t.start();

    for (Thread t : list)
    t.join();

    log();
    }
    }