Thread runnable ou blocked

domxaline -  
 domxaline -
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. KX Messages postés 19031 Statut Modérateur 3 020
     
    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();
    }
    }
    0