Maison >Java >javaDidacticiel >Java : exemples détaillés de processus et de threads

Java : exemples détaillés de processus et de threads

PHP中文网
PHP中文网original
2017-06-21 17:04:202119parcourir
  • Processus et threads

Un processus est le processus d'exécution d'un programme (tâche) et il est dynamique ; il contient des ressources (mémoire partagée, fichiers partagés) et les threads , est le transporteur de ressources et de threads.

Le thread est la plus petite unité d'exécution du système. Il existe plusieurs threads dans le même processus et les threads partagent les ressources du processus.

L'interaction des fils de discussion inclut l'exclusion mutuelle et la synchronisation.

  • Méthodes courantes des threads

La prise en charge des threads par Java se reflète principalement dans la classe Thread et l'interface Runnable, qui héritent toutes deux de Java Package .lang. Il existe une méthode courante run()

  • Méthodes d'erreur d'arrêt de thread : stop(), interruption()

  • La bonne façon d'arrêter un fil de discussion

public class ArmyRunnable implements Runnable {//volatile保证了线程可以正确读取其他线程写入的值volatile boolean keepRunning = true;
    @Overridepublic void run() {while(keepRunning) {//发动五连击for (int i = 0; i < 5 ; i++) {
                System.out.println(Thread.currentThread().getName() + "进攻对方[" + i + "]");
            }//暂停            Thread.yield();
        }
        System.out.println(Thread.currentThread().getName() + "结束了战斗");
    }
}
  • Conditions de course

Lorsque plusieurs threads partagent l'accès aux mêmes données (zone mémoire) en même temps, chaque thread tente d'exploiter les données, provoquant la corruption des données. Ce phénomène est appelé une condition de concurrence.

  • Interaction des threads : exclusion mutuelle et synchronisation

Exclusion mutuelle : en même temps, un seul thread peut traiter nos données clés ou section critique pour fonctionner.

Implémentation de l'exclusion mutuelle : sysnchronized (verrouillage intrinsèque), sysnchronized équivaut à ajouter un verrou au code afin que les autres threads ne puissent pas entrer dans cette zone critique pour accéder à nos ressources clés.

Synchronisation : il s'agit d'un mécanisme de communication entre les threads. Parce que certaines conditions d'un thread ne sont pas remplies, d'autres threads sont dans un certain état d'attente. Plus tard, parce que les conditions sont remplies, un thread utilisera une sorte de. méthode pour réveiller d’autres threads.

Implémentation de la synchronisation : wait()/notify()/notifyAll()--méthode membre de l'objet Object

Wait set est la salle de repos du thread

public void transfer(int from, int to, double amount) {//通过synchronized 关键字来实现互斥,synchronized既可以出现在方法之上,也能以块的形式出现在方法体之中//通过对lockObj加锁实现互斥//加锁操作是有开销的,多次加锁操作会降低系统的性能synchronized (lockObj) {//while循环,保证条件不满足时任务都会被条件阻挡,而不是继续竞争CPU资源while (energyBoxes[from] < amount) {try {//条件不满足,将当前线程放入锁对象(lockObj)上的wait set//wait set 是线程的休息室                    lockObj.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName());
            energyBoxes[from] -= amount;
            System.out.printf("从%d转移%10.2f单位能量到%d", from, amount, to);
            energyBoxes[to] += amount;
            System.out.printf("能量总和:%10.2f%n",getTotalEnergies());            //唤醒所有在lockObj对象上等待的线程            lockObj.notifyAll();
        }
        
    }
  • La différence entre la méthode Runnable et la méthode Thread pour créer des threads

 

  1. Méthode exécutable Elle peut éviter les défauts causés par la méthode Thread en raison de la fonctionnalité d'héritage unique de Java

  2. Le code exécutable peut être partagé par plusieurs threads (instances de Thread), adapté pour que plusieurs threads traitent la même ressource situation

  • Cycle de vie du thread

 

  1. Prêt : après avoir créé l'objet thread, la méthode start() du thread est appelée (à ce moment, le thread entre simplement dans la file d'attente des threads, en attendant d'obtenir les services CPU, et a les conditions pour rouler, mais il n'a pas forcément démarré) .

  2. En cours d'exécution : une fois que le thread à l'état prêt obtient la ressource CPU, il entre dans l'état d'exécution et commence à exécuter la logique dans la méthode run().

  3. Terminaison : une fois que la méthode run() du thread est exécutée ou que le thread appelle la méthode stop() (cette méthode a été désactivée), le thread entre dans l'état terminé.

  4. Blocage : dans certaines circonstances, un thread en cours d'exécution abandonne temporairement les ressources du processeur pour une raison quelconque, suspend sa propre exécution et entre dans un état de blocage, tel que la méthode sleep()

  • thread utilisateur et thread démon

  1. thread utilisateur : s'exécute au premier plan et effectue des tâches spécifiques , comme le thread principal du programme et les sous-threads connectés au réseau

  2. Thread démon : s'exécute en arrière-plan et sert les autres threads de premier plan une fois que tous les threads utilisateur sont terminés. opération, le thread démon terminera son travail avec la JVM.

  3. Application du thread démon : surveillance du thread dans le pool de connexions à la base de données, surveillance du thread après le démarrage de la machine virtuelle JVM. Le thread démon le plus courant est le thread de récupération de place

  4. Définir le thread démon : définissez le thread actuel comme thread démon en appelant la méthode setDaemon(true) de la classe Thread. Remarque : setDaemon(true) doit être appelé avant la méthode start(), sinon une exception sera levée ; le nouveau thread généré dans le thread démon est également un thread démon, toutes les tâches ne peuvent pas être assignées aux threads démon pour l'exécution, par exemple ; comme opérations de lecture et d’écriture. Ou logique de calcul.

  • Extensions

Mode mémoire Java

Verrous et état

Sujet Sécurité : Atomicité et visibilité...

Modèles d'interaction couramment utilisés en programmation multithread

Outils de programmation simultanée en Java5

  • Livre de référence

 core java

 La concurrence Java en pratique

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