Maison >Java >javaDidacticiel >Introduction à la compréhension et à l'utilisation du multi-threading

Introduction à la compréhension et à l'utilisation du multi-threading

零下一度
零下一度original
2017-06-30 09:50:543305parcourir

1. Partie Word :

①processus ②actuel ③fil de discussion ④exécutable disponible

⑤interruption ⑥rejoindre ⑦rendement généré ⑧la synchronisation se produit simultanément

2. Aperçu de la partie

1. La différence entre les threads et les processus :

Le processus est l'unité de base du programme en cours d'exécution du système

Le thread est la plus petite unité permettant d'effectuer des opérations dans le processus

2 .Expliquez quelles sont les deux façons de créer un thread

①Hériter de la classe thread

②Implémenter l'interface Runnable

3 Le cycle de vie d'un thread peut être divisé en plusieurs étapes, chacune Quelles sont les étapes

Cinq étapes : ①Créer ②Prêt ③Exécuter ④Bloquer ⑤Décès

4 Quelles méthodes d'utilisation des threads peuvent définir la mise en veille du thread, l'application du thread et la courtoisie de. le fil ?

sont : sleep(), join(), rendement()

5 Dans quelles circonstances la synchronisation des threads est-elle requise ? > Lorsque des conflits d'accès surviennent,

doivent être effectués de deux manières : ① Méthode synchronisée ② Bloc de code synchronisé

3. Partie exercice

1. Créer un fil de discussion à l'aide d'un. méthode qui hérite de la classe Thread, Afficher le contenu correspondant

Créez d'abord une classe de thread :

package oneOne;

classe publique MyRunnableone étend Thread{

public void run() {
for(int i=1;i<=20;i++){
System.out.println(i+".Bonjour, du fil"+Thread.currentThread().getName( ));

}
}
}

Créez à nouveau la classe de méthode principale et supprimez-la

package oneOne;

public. class testone {

/**

* @param args

*/
public static void main(String[] args) {
// TODO Stub de méthode généré automatiquement
MyRunnableone my=new MyRunnableone ();
MyRunnableone my1 =new MyRunnableone();
my.start();
my1.start();
}

}

2 . Créez un fil de discussion en implémentant l'interface Runnable

Identique à la première, créez d'abord la classe d'implémentation :

package oneTwo;

classe publique MyRunnabletwo implémente Runnable{<🎜. >

public void run() {

for(int i=1;i<=20;i++){
System.out.println(i+".Bonjour, du fil"+Thread.currentThread( ).getName());

}
}


}

Méthode Remain :

package oneTwo;

public class testtwo {

/**

* @param args

*/

public static void main(String[] args) {
// TODO Stub de méthode généré automatiquement
MyRunnabletwo my =new MyRunnabletwo();
MyRunnabletwo my1=new MyRunnabletwo();
Thread tr=new Thread(my);
Thread tr1=new Thread(my1);
tr.start();
tr1.start();
}

}

3. Utilisez le multi-threading pour simuler la randonnée et l'escalade à plusieurs

Créez d'abord un héritage ou classe d'implémentation (j'ai utilisé l'héritage ici) :

package oneThree;

public class MyRunnabletrois extends Thread{

private int time;

public int num=0;

public MyRunnabletwo(String name,int time,int kio) {
super(name);
this.time=time;
this.num=kio*1000/100;

}
public void run() {

while (num>0) {
try {
Thread.sleep(this.time);
} catch (InterruptedException e) {
// TODO : gérer l'exception
e.printStackTrace ();
}
System.out.println(Thread.currentThread().getName()+"Grimpé 100 mètres ! ");

num--;
}
System.out.println(Thread.currentThread().getName()+"Arrivé à la fin !");
}

}

Méthode Remain :

package oneThree;

test de classe publiquetrois {

/**

* @param args

*/

public static void main(String[] args) {
// TODO Stub de méthode généré automatiquement
MyRunnabletrois young=new MyRunnabletrois("jeune homme", 500, 1);
MyRunnabletrois old=new MyRunnabletrois ( "Personnes âgées", 1500, 1);
MyRunnabletrois enfant=new MyRunnabletrois("Enfant", 600, 1);
System.out.println("************ Commencez à gravir la montagne *********");
old.start();
young.start();
child.start();
}

}

4. Afficher, définir la priorité du thread

Hériter ou implémenter la classe en premier :

package oneFour;

classe publique MyRunnablefour étend le fil {

public void run() {

Thread.currentThread().setPriority(1);

System.out.println("Nom du sous-thread : "+Thread.currentThread().getName() +", priorité : "+Thread.currentThread().getPriority());
>
}


Puis main :

package oneFour;

test de classe publique quatre {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Stub de méthode généré automatiquement
MyRunnablefour myf=new MyRunnablefour();
myf.start();
System.out.println("******************Afficher la priorité par défaut************");
System.out .println("Nom du thread principal : "+Thread.currentThread().getName()+", priorité : "+Thread.currentThread().getPriority());
Thread.currentThread(). setPriority(10 );
System.out.println("***************après avoir modifié la priorité par défaut************");
//myf.setPriority (1);
System.out.println("Nom du fil principal : "+Thread.currentThread().getName()+", priorité : "+Thread.currentThread().getPriority ());
//System.out.println("Nom du sous-thread : "+MyRunnablefour.currentThread().getName()+", priorité : "+MyRunnablefour.currentThread().getPriority());


}

>

5. Simulez l'appel d'un numéro et la consultation d'un médecin

Premier héritage ou implémentation du cours :

package oneFive;

public class MyRunnablefive extends Thread{
private int time;
//public int pertail=0;
public MyRunnablefive(String common,int time) {
super(common);
this. time=time;

}
public void run() {
Thread.currentThread().setPriority(8);
for( int i=1;i<=10;i++ ){
try {
Thread.sleep(this.time);
} catch (InterruptedException e) {
// TODO : gérer l'exception
e.printStackTrace();
}
System.out.println("Numéro spécial : "+i+" le patient voit un médecin ! ");

}
}

}

Reste :

package oneFive;

classe publique testfive {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Stub de méthode généré automatiquement
//MyRunnablefive pertail=new MyRunnablefive(" Spécial number", 1000);

Thread temp=new Thread(new MyRunnablefive("Special number", 400));
temp.start();
Thread.currentThread().setPriority ( 4);
for(int i=1;i<=50;i++){

if(i==11){

try {
temp.join ( );
} catch (InterruptedException e) {
// À FAIRE : gérer l'exception
e.printStackTrace();
}
}
essayez {
Thread.sleep ( 200);
} catch (InterruptedException e) {
// TODO Bloc catch généré automatiquement
e.printStackTrace();
}
System.out.println("Nombre normal : "+i+" le patient est en cours de traitement");

}

}
}

6. Course de relais de simulation multithread

Première Créez une classe d'héritage ou d'implémentation :

package oneSix;

classe publique runSix implémente Runnable{
private int mètres=1000;
public runSix(){


}
@Override
public void run() {
// TODO Stub de méthode généré automatiquement
//System.out.println("Coming in");
while (true) {
//type type = (type) true.nextElement();
synchronisé (this) {
if(meters<=100){
break;

}
System.out.println(Thread.currentThread().getName()+" Vous avez le relais ! ");
for (int i = 0; i < 100; i+=10) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Bloc catch généré automatiquement
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"ran"+(i+10 ) +"meters!");
}
mètres-=100;
}
}
}

}

Puis classe d'interface principale :

package oneSix;

public class testsix {

/**
* @param args
*/
public static void main(String[] args) {
/ / TODO Stub de méthode généré automatiquement
runSix ru=new runSix();
for (int i = 0; i < 5; i++) {
new Thread(ru,(i+1) + "Joueur n°.").start();
}
}

}

7. Simulation multithread de l'achat de billets en ligne

Taopaopao, Zhang vote, scalpers, récupérez dix votes ensemble, limitez les scalpers à un seul ticket

Créez d'abord un héritage ou une classe de mise en œuvre :

package oneSeven ;

public class siteSeven implémente Runnable{
private int count=10;
private int num=0;
private boolean flag=false;

@Override
public void run () {
// TODO Stub de méthode généré automatiquement
//System.out.println("Coming in");
while (!flag) {

synchronisé (this) {
//System.out.println("Coming in");
if(count<=0){
flag=true;
return;
}
num++;
count--;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Bloc catch généré automatiquement
e.printStackTrace( );
}
String name=Thread.currentThread().getName();
if(name.equals("scalper")){
System.out.println(name+"rob The "+num+"ième ticket est atteint, et "+count+" tickets restent ");
break;
}
System.out.println(name+"Obtenir le "+num+"ième ticket, " +count+" tickets restants ! ");
}
}
}

}

Créez à nouveau la classe d'interface principale :

package oneSeven;

public class testseven {

/**
* @param args
*/
public static void main(String[] args) {
// TODO généré automatiquement stub de méthode
siteSeven si=new siteSeven();
Thread per1=new Thread(si,"Dadong");
Thread yellow=new Thread(si,"Scalper");
Thread per2 =nouveau fil de discussion(si,"Qizhen");
per1.start();
yellow.start();
per2.start();
}

}

Quatre : Résumé :

1. Les méthodes de la classe Thread implémentent des opérations sur les objets thread

①Ajuster la priorité du thread

②Thread sleep sleep( )

③Thread forcé en cours d'exécution join()

④Thread courtoisie rendement()

2. 🎜>

3. Deux façons de créer des threads :

①Déclarer une sous-classe qui hérite de la classe Thread et implémenter la méthode run() de la classe Thread

②Déclaration Une classe qui implémente la classe Thread. Interface exécutable, puis implémente la méthode run()

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn