Maison >Java >javaDidacticiel >Discussion sur le multithreading Java

Discussion sur le multithreading Java

巴扎黑
巴扎黑original
2017-07-20 13:24:491632parcourir

1. Introduction au sujet

Avant de commencer à décrire brièvement le mécanisme multithread Java, je dois me plaindre de la mauvaise atmosphère de partage technologique dans l'industrie informatique de mon pays et l'Internet incompétent. Profondeur des solutions techniques. Lorsqu'un gars qui était nouveau sur Java m'a posé des questions sur les problèmes liés au mécanisme multithread Java, je lui ai demandé de demander de l'aide à Du Niang et de le laisser apprendre d'abord à essayer de résoudre le problème par lui-même, mais il m'a dit qu'il ne pouvait pas ; trouver ce qu'il voulait en ligne. J'ai également essayé de chercher des informations sur Internet pendant longtemps, mais je n'ai vraiment pas trouvé de documents détaillés et clairement énoncés. Ce qui est encore plus regrettable, c'est que certains documents qui peuvent avoir une certaine valeur de référence doivent être téléchargés par des moyens anormaux, comme l'enregistrement, la réponse ou même l'achat, ce qui découragera inévitablement de nombreuses personnes et, au final, rien ne se passera.

Je ne critique pas délibérément, mais j'espère que davantage de personnes pourront apprendre à contribuer comme Stallman, le père de la liberté Linux, si tout le monde peut essayer de contribuer, tout le monde finira par le faire. Plus facile de demander ; .

(Quand j'aurai le temps dans le futur, je continuerai à classer et à résumer les points de connaissances Java et à les mettre dans mon blog personnel CSDN ; en plus de Java, j'envisagerai également d'introduire d'autres aspects du contenu à ce moment-là, veuillez rester à l'écoute ^( ..)^)


Problèmes similaires en réalité

Supposons que vous soyez propriétaire d'un restaurant de restauration rapide Grâce à votre travail acharné, le restaurant de restauration rapide regorge enfin d'affaires et les affaires sont en plein essor. Afin d'augmenter les ventes, vous décidez d'en ajouter. services de livraison de nourriture à domicile. Les finances de l'entreprise vous indiquent que vous pouvez aider à développer cela. L'entreprise a 120 000 yuans à dépenser. Comment allez-vous dépenser cet argent à ce moment-là ?

Bien sûr, il existe de nombreuses façons de contrôler, et lors du contrôle, vous devez tenir compte ici du nombre de personnes, de l'étendue de la livraison de nourriture, de la forme de livraison de nourriture, etc. nous nous concentrons sur la forme de livraison de nourriture Détails :

1) Achetez une Chevrolet Sail

2) Achetez 15 voitures à batterie

L'argent restant après déduction des coûts de base tels que les salaires des employés est utilisé pour acheter des outils de livraison de nourriture ci-dessus. Ils ont tous deux leurs propres avantages : Premièrement, le Chevrolet Sail. peut livrer de la nourriture plus rapidement et peut fournir une gamme plus large de livraison de nourriture ; deuxièmement, l'utilisation de chariots à batterie comme véhicule de livraison de nourriture peut livrer à plusieurs clients en même temps, et le coût de livraison est évidemment inférieur. Entre les deux, quel choix feriez-vous ?

Il est évident que le deuxième véhicule de livraison de nourriture est plus pratique : en comparaison, ce dernier peut gérer plus de clients, et le temps d'attente des clients à l'arrière est considérablement raccourci. Imaginez, si vous appeliez et commandiez un déjeuner et qu'il ne vous était livré qu'à 18 heures simplement parce que vous étiez le 25ème client, que ressentiriez-vous ?

En fait, la considération du propriétaire d'un restaurant de restauration rapide lors du choix de plusieurs chariots à batterie pour la livraison de nourriture est exactement la même que l'idée de choisir un contrôle multithread pour les processus. les programmes ont souvent des fonctions très limitées. Dans certains cas, certains domaines peuvent même ne pas atteindre les performances attendues. Par exemple, lorsque vous souhaitez que les données du serveur soient accessibles par plusieurs clients en même temps, un seul thread rendra cette idée vaine ; dans un cas à un seul thread, les besoins de plusieurs clients seront stockés dans une pile et exécutés ; en séquence, en s'appuyant sur Il est difficile pour les clients ultérieurs d'avoir une meilleure expérience d'accès.

Le langage Java offre une excellente prise en charge multithread. Les programmes multithread peuvent contenir plusieurs flux d'exécution séquentiels, et plusieurs flux d'exécution séquentiels n'interfèrent pas les uns avec les autres. En général, l'utilisation de la programmation multithread présente les avantages suivants :

1) Les données mémoire peuvent être partagées entre plusieurs threads

2) Plusieurs threads sont exécutés simultanément et peuvent effectuer plusieurs tâches en même temps

 ;

3) Le langage Java intègre une prise en charge des fonctions multithread, simplifiant ainsi la programmation multithread en Java.

Comment créer des multi-threads

(1) Hériter de la classe Thread : cette méthode n'est généralement pas couramment utilisée, étant donné que la classe thread nouvellement créée doit hériter d'autres classes parents

 MyThread

(2) Implémenter l'interface Runnable : la méthode la plus couramment utilisée

class MyThread implements Runnable{
  @Overridepublic void run(){      //do something here             }
}

(3) Implémenter le Callable interface : cette méthode utilise Dans les scénarios où une valeur de résultat doit être renvoyée, l'implémentation de l'interface Collable nécessite l'implémentation de sa méthode call()

 class MyThread implements Callable<String>{
  @Override
  public String call() throws Exception{
     //do something here
    return XXX;
  }
  
}

public class FutureMain{
  public static void main(String[] args){
    //构造FutureTask
    FutureTask<String> future = new FutureTask<String>(new MyThread());
    Thread t1 = new Thread(future);
    t1.start();
    //取得call()方法的返回值
    System.out.println("返回值"+future.get());
  }
}

Bien sûr, en plus des fonctions de base , JDK fournit également quelques fonctions simples pour les fonctions Future Control :

boolean cancle(boolean mayInterruptIfRunning);                       //取消任务boolean isCancelled();                                               //是否已经取消boolean isDone();                                                    //是否已完成

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