Maison  >  Article  >  Java  >  Qu'est-ce que le multithread Java

Qu'est-ce que le multithread Java

(*-*)浩
(*-*)浩original
2019-05-05 11:52:3414443parcourir

Cet article présentera le multithreading et ses exemples.

Qu'est-ce que le multithread Java

Les programmes Java s'exécutent tous dans la machine virtuelle Java (JVM). À l'intérieur de la JVM, le multitâche du programme est implémenté via des threads. Chaque fois qu'une application Java est démarrée avec la commande Java, un processus JVM est démarré. Dans un même processus JVM, il n’y a qu’un seul processus, qui est lui-même. Dans cet environnement JVM, tout le code du programme s'exécute dans des threads.

Les applications Java généralement courantes sont monothread. Par exemple, lorsque vous utilisez la commande java pour exécuter l'application Java HelloWorld la plus simple, un processus JVM est démarré. processus, la JVM trouve le point d'entrée main() du programme, puis exécute la méthode main(), générant ainsi un thread, appelé thread principal. Lorsque la méthode principale se termine, le thread principal est terminé. Le processus JVM se ferme également immédiatement.

Pour plusieurs threads dans un processus, plusieurs threads partagent le bloc mémoire du processus Lorsqu'un nouveau thread est généré, le système d'exploitation n'alloue pas de nouvelle mémoire, mais permet au nouveau thread de partager le bloc mémoire d'origine. . Certains processus bloquent la mémoire. Par conséquent, la communication entre les threads est simple et rapide. Étant donné que différents processus se trouvent dans des blocs de mémoire différents, la communication entre processus est relativement difficile.

Cours recommandés : Tutoriel Java

Un processus fait référence à une application exécutée en mémoire. Chaque processus possède son propre espace mémoire indépendant. , plusieurs threads peuvent être démarrés en un seul processus. Par exemple, dans les systèmes Windows, un exe en cours d’exécution est un processus.

Thread fait référence à un flux d'exécution dans un processus. Un processus peut exécuter plusieurs threads. Par exemple, le processus java.exe peut exécuter de nombreux threads. Les threads entrent toujours dans un processus et plusieurs threads d'un processus partagent la mémoire du processus. Le

Multi-threading fait référence au fait que ce programme (un processus) génère plus d'un thread lors de l'exécution de

Instance

Thread 1 : Ensuite, utilisez la méthode d'implémentation de Runnable pour implémenter le multi-threading :.

public class TestRunnable implements Runnable {

    private int time=1;
    private SourceA s;
    private String id = "001";
    public TestRunnable(SourceA s){
        this.s = s;
    }
    public void setTime(int time) {
        this.time = time;
    }
    
    @Override
    public void run() {
        try {
            System.out.println("i will sleep"+ time);
            Thread.sleep(time);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        synchronized(s){
            s.notify();
            System.out.println("我唤醒了002!");
            System.out.println("我存入了id"+id);
            s.setSource(id);
        }
    }

}

Thread 2 : Ensuite, utilisez l'héritage Thread pour implémenter le multi-threading :.

public class TestThread extends Thread {
    private int time = 1;
    private SourceA s = null;
    String id = "002";
    
    public void setTime(int time) {
        this.time = time;
    }
    
    public TestThread(SourceA s){
        this.s = s ;
    }
    
    @Override
    public void run() {
        try {
            System.out.println("i will sleep"+ time);
            sleep(time);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        synchronized(s){
            try {
                System.out.println("我"+ id +"要进行等待了");
                s.wait();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("我被唤醒了");
            System.out.println("我存入了id"+id);
            s.setSource(id);
        }
    }

}

Une classe qui synchronise les threads, avec les méthodes get et set.

public class SourceA {
    private List<String> list = new ArrayList<String>();
    public synchronized void getSource(){
        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i));
        }
    }
    public synchronized void setSource(String id){
        list.add(id);
    }
}

Classe de test qui imprime les résultats multithread sur la console.

public void test(){
        SourceA s = new SourceA();
        TestThread tt = new TestThread(s);
        TestRunnable tr = new TestRunnable(s);
        Thread t = new Thread(tr);
        System.out.println("调用线程1");
        tt.start();
        System.out.println("调用线程2");
        t.start();
    }

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
Article précédent:Qu'est-ce que le swing en JavaArticle suivant:Qu'est-ce que le swing en Java