Allez droit au but
Dans les cercles informatiques, chaque fois que nous parlons de simultanéité, nous parlons forcément d’une série de threads s’exécutant simultanément sur un ordinateur. S'il y a plusieurs processeurs ou un processeur multicœur sur cet ordinateur, alors il "fonctionne simultanément", cependant, si l'ordinateur ne dispose que d'un processeur monocœur, alors "l'exécution simultanée" n'est que des apparences ;
Tous les systèmes d'exploitation modernes prennent en charge l'exécution simultanée de tâches. Vous pouvez écouter de la musique et lire les actualités en ligne sans retarder le premier e-mail. Nous pouvons dire que cette concurrence est une concurrence au niveau du processus. Au sein du processus, je peux également constater qu’il existe de nombreuses tâches simultanées. Nous appelons des tâches simultanées exécutées dans un processus des threads.
Un autre concept courant lié à la concurrence est le parallélisme. Il existe certaines différences et certains liens entre la concurrence et le parallélisme. Certains programmeurs (Auteur, translittéré par « programmeur ») pensent que l'exécution d'une application avec plusieurs threads sur un processeur monocœur est une concurrence, et vous pouvez également observer l'exécution du programmeur, lorsque votre programme s'exécute avec plusieurs threads, lorsque les threads s'exécutent ; sur plusieurs processeurs ou processeurs multicœurs, ils sont parallèles. Il y a aussi des programmeurs qui pensent que si les threads de l'application ne sont pas exécutés dans un ordre prédéfini, c'est de la concurrence ; afin de simplifier la solution du problème, un thread est utilisé, et ces threads sont exécutés dans un certain ordre, puis c'est du parallélisme.
Ce chapitre utilisera douze exemples pour montrer comment utiliser l'API Java7 pour effectuer certaines opérations de base sur les threads. Vous pourrez voir, dans un programme Java, comment créer et exécuter des threads, comment contrôler l'exécution des threads, comment manipuler un groupe de threads comme une unité, etc.
Dans cette section, nous apprendrons comment créer un thread dans un programme Java et comment l'exécuter. Dans un programme Java, tout est un objet, tout comme les threads. Il existe deux manières de créer des fils de discussion :
1. Héritez de la classe Thread et remplacez la méthode run() ;
2. Créez une classe qui implémente l'interface Runnable, puis créez un objet de la classe Thread, puis transmettez l'instance de la classe qui implémente l'interface Runnable en tant que paramètre à l'instance de la classe Thread.
Dans cette section, nous utiliserons la deuxième méthode pour créer dix threads et les exécuter. Chaque thread calcule et imprime le produit de deux entiers sur dix.
je le sais
Suivez les étapes décrites ci-dessous pour implémenter cet exemple :
1. Créez une classe nommée Calculator et implémentez l'interface Runnable. Le code est le suivant :
Copiez le code comme suit :
La calculatrice de classe publique implémente Runnable {
2. Déclarez un attribut entier privé nommé number et implémentez le constructeur de cette classe pour initialiser l'attribut qui vient d'être déclaré. Le code est le suivant :
Copiez le code comme suit :
numéro int privé ;
Calculatrice publique (numéro int) {
this.number = nombre ;
}
3. Implémentez la méthode run(), qui est le programme (instruction) qui s'exécute lorsque le thread que nous avons créé est exécuté, cette méthode est donc utilisée pour calculer la table de multiplication. Le code spécifique est le suivant :
Copiez le code comme suit :
@Outrepasser
public void run() {
pour (int je = 0; je < 10; i++) {
System.out.printf("%s : %d * %d = %d/n",
Thread.currentThread().getName(),
nombre, je, je * nombre);
}
}
4. Il est maintenant temps d’implémenter la classe principale de l’exemple d’application. Créez une classe nommée Main et ajoutez la méthode main dans la classe. Le code est le suivant :
Copiez le code comme suit :
classe publique Principale {
public static void main (String[] arguments) {
5. Dans la méthode main(), créez une boucle for qui parcourt dix fois. Dans le corps de la boucle, créez une calculatrice d'objet de la classe Calculator, créez un thread d'objet de la classe Thread et transmettez la calculatrice en tant que paramètre de la méthode main(). constructeur à l’instruction d’initialisation. Enfin, appelez la méthode start() de l'objet thread. Le code est le suivant :
Copiez le code comme suit :
pour (int je = 0; je < 10; i++) {
Calculatrice calculatrice = nouvelle Calculatrice(i);
Thread thread = new Thread (calculatrice);
thread.start();
}
6. Exécutez ce programme pour voir comment différents threads s'exécutent simultanément.
sais pourquoi
Ce qui suit est un résultat imprimé sur la console lors de l'exécution du programme. Nous pouvons voir que tous les threads que nous avons créés s'exécutent simultanément.
Copiez le code comme suit :
Fil-3 : 3 * 5 = 15
Fil-0 : 0 * 2 = 0
Fil-3 : 3 * 6 = 18
Fil-1 : 1 * 6 = 6
Fil-1 : 1 * 7 = 7
Fil-3 : 3 * 7 = 21
Fil-3 : 3 * 8 = 24
Fil-0 : 0 * 3 = 0
Fil-0 : 0 * 4 = 0
Fil-3 : 3 * 9 = 27
Fil-1 : 1 * 8 = 8
Tous les programmes Java exécutent au moins un thread. Lorsque nous exécutons un programme Java, la machine virtuelle Java (ci-après dénommée JVM) exécutera un thread et appellera le programme contenant la méthode main().
Lorsque la méthode start() de l'objet Thread est appelée, un autre thread est créé. Combien de fois la méthode start() est appelée, combien de threads seront créés.
Lorsque tous les threads auront terminé leur exécution, le programme Java se terminera. (Sauf circonstances particulières, tous les threads non-démons sont exécutés.) Lorsque le thread de démarrage (tel que le thread exécutant la méthode main()) se termine, les threads restants continueront à s'exécuter jusqu'à ce que la tâche informatique soit terminée. Lorsqu'un des threads appelle System.exit(), demandant à la JVM de terminer le programme, tous les threads terminent leur exécution.
Lorsque la méthode run() de l'objet Thread est appelée, le thread ne sera pas créé ; de même, lorsque la méthode run() de la classe qui implémente l'interface Runnable est appelée, le thread ne sera pas créé. Un thread est créé uniquement lorsque la méthode start() de l'objet Thread est appelée.
sans fin
Comme mentionné au début de cette section, il existe une autre façon de créer un thread : hériter de la classe Thread et remplacer la méthode run(). De cette façon, vous pouvez créer un objet de la sous-classe Thread puis appeler start(). méthode de l’objet. Créer un fil.
Copiez le code comme suit :
Parce que je préparais l'interview, j'ai trouvé un tas d'informations sur le multi-threading Java, dont ce "Java 7 Concurrency Cookbook". Les explications sont très simples et faciles à comprendre. beaucoup sur le multi-threading mais je veux l'apprendre sérieusement. Après avoir cherché, je n'ai pas trouvé la version chinoise, alors j'ai décidé de préparer moi-même suffisamment de nourriture et de vêtements. Par conséquent, nous prévoyons de publier une traduction non officielle, et le titre est provisoirement intitulé « Collection d'exemples de concurrence Java7 ».
Utiliser la doctrine
Cet article est traduit du "Java 7 Concurrency Cookbook" (D Gua Ge l'a volé sous le nom de "Java7 Concurrency Sample Collection") et n'est utilisé que comme matériel d'apprentissage. Il ne peut être utilisé à des fins commerciales sans autorisation.
Petit succès
Le livre original ne contient pas le code complet, ce qui n'est pas pratique à visualiser. Par conséquent, frère D Gua a ajouté une section pour afficher la version complète du code présenté dans cette section.
Le code complet de la classe Calculatrice est le suivant :
package com.diguage.books.concurrencycookbook.chapter1.recipe1 ;
/**
* Date : 2013-09-13
* Heure : 21h42
*/
La calculatrice de classe publique implémente Runnable {
numéro int privé ;
Calculatrice publique (numéro int) {
this.number = nombre ;
}
@Outrepasser
public void run() {
pour (int je = 0; je < 10; i++) {
System.out.printf("%s : %d * %d = %d/n",
Thread.currentThread().getName(),
nombre, je, je * nombre);
}
}
}
Le code complet de la classe Main
Copiez le code comme suit :
package com.diguage.books.concurrencycookbook.chapter1.recipe1 ;
/**
* Date : 2013-09-13
* Heure : 19h46
*/
classe publique Principale {
public static void main (String[] arguments) {
pour (int je = 0; je < 10; i++) {
Calculatrice calculatrice = nouvelle Calculatrice(i);
Thread thread = new Thread (calculatrice);
thread.start();
}
}
}