Maison  >  Article  >  Java  >  1. Introduction à la concurrence/multithreading Java

1. Introduction à la concurrence/multithreading Java

黄舟
黄舟original
2017-02-28 10:08:431128parcourir

Repensez à l'époque où un ordinateur n'avait qu'un seul processeur et ne pouvait traiter qu'un seul programme à la fois. Puis le multitâche est apparu, ce qui signifie que les ordinateurs pouvaient gérer plusieurs programmes en même temps. Même si ce n’est pas vraiment « en même temps ». Un seul processeur est partagé entre les programmes. Le système d'exploitation basculera entre les programmes en cours d'exécution, en exécutant l'un d'entre eux pendant un certain temps avant de basculer.

Avec l'avènement du multitâche, c'est un nouveau défi pour les développeurs de logiciels. Les programmes ne peuvent pas supposer que la totalité du processeur est disponible à tout moment, ni que toute la mémoire et les autres ressources informatiques sont disponibles. Un bon programme doit libérer toutes les ressources qu'il n'utilise plus afin que d'autres programmes puissent les utiliser.

Plus tard, le multi-threading est apparu, ce qui signifie que vous pouvez exécuter plusieurs threads dans le même programme. Un thread peut être considéré comme un processeur exécutant un programme. Lorsque plusieurs threads s’exécutent dans le même programme, c’est comme si plusieurs processeurs exécutaient le même programme.

Plusieurs threads peuvent être un excellent moyen d'augmenter les performances de certains types de programmes. Cependant, le multithreading constitue un défi encore plus grand que le multitâche. Ce thread s'exécute dans le même programme, lisant et écrivant la même mémoire en même temps. Cela peut entraîner des erreurs non visibles dans les threads uniques. Certaines de ces erreurs peuvent ne pas être visibles sur les machines à processeur unique, car les deux threads ne s'exécutent jamais en même temps. Les ordinateurs modernes disposent tous de processeurs multicœurs, et il existe même plusieurs types de processeurs. Cela signifie que des threads distincts peuvent être exécutés simultanément par des cœurs ou des processeurs distincts.


Si un thread lit une unité de mémoire et qu'un autre thread y écrit, quelle valeur le premier thread finira-t-il par lire ? Est-ce que cet ancien en vaut la peine ? Ou la valeur écrite par le deuxième thread ? Ou s’agit-il d’une valeur hybride entre les deux ? Ou si deux threads écrivent dans le même emplacement mémoire en même temps, quelle valeur restera-t-il à la fin ? Valeur écrite par le premier thread ? Valeur écrite via le deuxième thread ? Ou est-ce une valeur mixte ?

Sans garanties appropriées, n’importe laquelle de ces sorties est possible. Ce comportement est même imprévisible. Cette sortie peut changer à tout moment. Il est donc important en tant que développeur de savoir comment utiliser les bonnes mesures de protection : cela signifie apprendre à contrôler la manière dont les threads accèdent aux ressources partagées, comme la mémoire, les fichiers, les bases de données, etc. C'est l'un des sujets de ce didacticiel sur la concurrence Java.

Multi-threading et concurrence en Java

Java a été le premier langage à rendre le multithreading simple et facile à utiliser pour les développeurs. Java dispose de capacités multithread depuis le début. Par conséquent, les développeurs Java seront souvent confrontés aux problèmes décrits ci-dessus. C'est pourquoi j'ai écrit une série d'articles sur la concurrence Java. Tout comme moi, tout autre développeur Java en bénéficiera probablement.

Cette série portera principalement sur le multithreading Java, mais certains des problèmes qui surviennent dans le multithreading sont similaires à ceux qui surviennent dans les systèmes multitâches et distribués. Les systèmes multitâches et distribués peuvent également être mentionnés dans cette série. Le mot « concurrence » ne concerne donc pas uniquement le multithreading.

La concurrence Java en 2015 et au-delà

Depuis l'écriture du premier livre sur la concurrence Java, dans le monde des frameworks et des conceptions de concurrence Java, beaucoup Cela s'est produit, même depuis la sortie des outils de concurrence Java 5.

De nouvelles plates-formes et API asynchrones « rien partagé » comme Vert.x, Play/Akka et Qbit ont vu le jour. Ces plates-formes utilisent des modèles de concurrence différents par rapport au modèle de concurrence Java standard composé de threads, de mémoire partagée et de verrous. De nouveaux algorithmes de concurrence non bloquants ont été publiés et de nouveaux outils de concurrence non bloquants comme LMAX Disrupter ont été ajoutés à notre boîte à outils.

Avec ces nouveaux développements, il est également temps pour moi de mettre à jour le tutoriel Java Concurrency. Par conséquent, ce tutoriel est à nouveau en cours de révision. De nouveaux tutoriels seront publiés chaque fois qu'il sera temps de les écrire.

Ce qui précède est l'introduction à 1. Concurrence Java/multi-threading Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


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