Maison > Java > javaDidacticiel > Java est-il multithread ?

Java est-il multithread ?

(*-*)浩
Libérer: 2019-11-09 13:44:39
original
3377 Les gens l'ont consulté

Java est multi-thread. Il existe trois façons d'utiliser le multi-threading : hériter de la classe Thread, implémenter l'interface Runnable et utiliser Callable et Future pour créer des threads.

Java est-il multithread ?

Hériter de la classe Thread (Apprentissage recommandé : cours java )

Implémentation La méthode est très simple. Il vous suffit de créer une classe pour hériter de la classe Thread, puis de réécrire la méthode run, dans la méthode main, d'appeler la méthode start de l'objet instance de classe pour obtenir une concurrence multithread. Code :

public class MyThread extends Thread {
    @Override
    public void run(){
        super.run();
        System.out.println("执行子线程...");
    }
}
Copier après la connexion

Cas de test :

public class Test {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
        System.out.println("主线程...");
    }
}
Copier après la connexion

Résultat de l'exécution :

Java est-il multithread ?

Implémenter l'interface Runnable

L'implémentation de cette méthode est également très simple, qui consiste à modifier la classe Thread héritée pour implémenter l'interface Runnable. Le code est le suivant :

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("执行子线程...");
    }
}
Copier après la connexion

Cas de test :

public class Test {
    public static void main(String[] args) {
        Runnable runnable = new MyRunnable();
        Thread thread = new Thread(runnable);
        thread.start();
        System.out.println("主线程运行结束!");
    }
}
Copier après la connexion

Résultat d'exécution :

Java est-il multithread ?

Utilisez Callable et Future pour créer des threads

Les deux méthodes ci-dessus ont ces deux problèmes :

Impossible d'obtenir la valeur de retour du fil enfant

La méthode run ne peut pas lever d'exceptions

Afin de résoudre ces deux problèmes, nous devons utiliser l'interface Callable. En parlant d'interfaces, l'instance de classe d'implémentation d'interface Runnable ci-dessus est transmise en tant que paramètre du constructeur de la classe Thread, puis le contenu de la méthode run est exécuté via le démarrage de Thread. Cependant, Callable n'est pas une sous-interface de Runnable, mais une toute nouvelle interface. Ses instances ne peuvent pas être directement transmises à la construction Thread, une autre interface est donc nécessaire pour la convertir.

Dans ce cas, il y a en fait un processus de conversion de plus que la méthode précédente. Au final, un nouveau fil de discussion est créé via le démarrage du fil. Avec cette idée, le code est facile à comprendre :

import java.util.concurrent.Callable;
public class MyCallable implements Callable {
    int i = 0;
    @Override
    public Object call() throws Exception {
        System.out.println(Thread.currentThread().getName()+"  i的值:"+ i);
        return i++; //call方法可以有返回值
    }
}
Copier après la connexion

Test :

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class Test {
    public static void main(String[] args) {
        Callable callable = new MyCallable();
        for (int i = 0; i < 10; i++) {
            FutureTask task = new FutureTask(callable);
            new Thread(task,"子线程"+ i).start();
            try {
                //获取子线程的返回值
                System.out.println("子线程返回值:"+task.get() + "\n");
            }  catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
Copier après la connexion

Résultat de l'exécution (partie) :

Java est-il multithread ?

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!

Étiquettes associées:
Déclaration de ce site Web
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
Derniers numéros
Impossible d'installer Java
Depuis 1970-01-01 08:00:00
0
0
0
Java peut-il être utilisé comme backend du Web ?
Depuis 1970-01-01 08:00:00
0
0
0
Installer JAVA
Depuis 1970-01-01 08:00:00
0
0
0
Aide : Données chiffrées JAVA Décryptage PHP
Depuis 1970-01-01 08:00:00
0
0
0
Est-ce en langage Java ?
Depuis 1970-01-01 08:00:00
0
0
0
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal