Maison  >  Article  >  Java  >  Exemple de code Java pour implémenter un appel asynchrone

Exemple de code Java pour implémenter un appel asynchrone

不言
不言avant
2019-03-07 17:15:392646parcourir

Le contenu de cet article concerne des exemples de code pour implémenter des appels asynchrones en Java. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Tout d'abord, le problème que j'ai rencontré est que le cache doit être mis à jour lorsque l'interface est appelée, et la mise à jour du cache est un processus rapide ou non, je prévois donc de faire un appel asynchrone à renvoie les résultats dont j'ai besoin. Quant à savoir quand le cache sera mis à jour, ce n'est pas à cela que je dois faire attention

Plus de bêtises, parlons du code

public class MyExecutor {
    private ExecutorService executor = Executors.newCachedThreadPool() ;
    public void fun() throws Exception {
        executor.submit(new Runnable(){
            @override
                public void run() {
                    try {
                        //要执行的业务代码,我们这里没有写方法,可以让线程休息几秒进行测试
                        Thread.sleep(10000);
                        System.out.print("睡够啦~");
                    }catch(Exception e) {
                        throw new RuntimeException("报错啦!!");
                    }
                }
        });
    }
}
public class Demo{
    
    public static void main(String[] args) {
        
         MyExecutor  myExecutor = new MyExecutor();
         try {
            myExecutor.fun();
            System.our.print("你先睡着,我先回家啦~");
        }catch(Exception e) {
             throw new RuntimeException("业务程序报错啦!!");
        }
    }
}

D'accord, c'est la fin du code (ps : je tape à la main, pardonnez-moi s'il y a des erreurs)

Exécutez la méthode main

Elle s'imprimera en premier (tu t'endors d'abord, je rentrerai d'abord à la maison~)

Puis (dors suffisamment~)

C'est-à-dire que le programme principal a déjà renvoyé le résultat lorsque la méthode qui doit le faire L'exécution asynchrone n'est pas terminée. Il n'est pas nécessaire de continuer à attendre. Cela peut garantir que le programme renvoie d'abord le résultat et continue ensuite à effectuer des tâches fastidieuses qui ne nécessitent pas d'attente. Bien sûr, vous pouvez également ajouter quelques méthodes pour déterminer. asynchrone. Si la méthode a été exécutée.

Parlons de la classe Executors

Cette classe est utilisée pour créer un pool de threads

Il existe plusieurs méthodes

1 newFixedThreadPool() crée un. taille fixe La taille du pool de threads restera inchangée une fois qu'elle aura atteint la valeur maximale. Si un thread se termine en raison d'une exception d'exécution, le pool de threads ajoutera un nouveau thread

2. newCachedThreadPool() crée un cache pouvant être mis en cache. pool de threads.Si la taille du pool de threads dépasse les threads requis pour traiter les tâches, certains threads inactifs (n'exécutant pas de tâches pendant 60 secondes) seront recyclés. Lorsque le nombre de tâches augmente, ce pool de threads peut ajouter intelligemment de nouveaux threads. Tâches de traitement. Ce pool de threads ne limite pas la taille du pool de threads. La taille du pool de threads dépend entièrement de la taille maximale des threads que le système (JVM) peut créer

3. newSingleThreadExecutor() crée un thread unique. pool de threads. Ce pool de threads ne comporte que des threads fonctionnels, ce qui équivaut à un seul thread exécutant toutes les tâches en série. Si le seul thread se termine anormalement, un nouveau thread le remplacera. Ce pool de threads garantit que toutes les tâches sont exécutées dans l'ordre dans lequel elles sont soumises

4. newScheduledThreadPool() crée un pool de threads de taille illimitée. Ce pool de threads prend en charge la synchronisation et l'exécution périodique des tâches

<.>5. newSingleThreadScheduledExecutor() crée un pool de threads à un seul thread. Ce pool de threads prend en charge la synchronisation et l'exécution périodique des tâches


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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer