Maison >Java >javaDidacticiel >Introduction à la compréhension et à l'utilisation du multi-threading
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 :
* @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();
}
}
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 :
* @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();
}
}
public void run() {
Thread.currentThread().setPriority(1); System.out.println("Nom du sous-thread : "+Thread.currentThread().getName() +", priorité : "+Thread.currentThread().getPriority());
>
}
/**
* @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!