Thread runnable ou blocked
domxaline
-
domxaline -
domxaline -
Bonjour,
j'ai essayé ce prg suivante,quand je l'exécute,j'ai un pb avec son output
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
j'ai essayé ce prg suivante,quand je l'exécute,j'ai un pb avec son output
voilà 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());
}
}
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:
- Thread runnable ou blocked
- Compte thread - Accueil - Réseaux sociaux
- Thread instagram c'est quoi - Accueil - Guide réseaux sociaux
- Scan manga blocked ✓ - Forum Réseaux sociaux
- 12 thread ✓ - Forum Processeur
- Qbittorrent blocked - Forum Logiciels
2 réponses
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 :
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();
}
}