Thread runnable ou blocked

Fermé
domxaline - Modifié par domxaline le 23/10/2013 à 17:53
 domxaline - 23 oct. 2013 à 22:41
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
A voir également:

2 réponses

KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
Modifié par KX le 23/10/2013 à 19:34
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
merci beaucoup
0