gars, quelqu'un peut-il donner un exemple simple pratique de Utilisation de Merci pour toute réponse. P> locksupport code> &
abstracttiqueSuSynchronizer code> Utiliser? Exemple donné dans Javadocs est assez tendu. p>
Semaphore code> Les permis sont compris par moi. P>
5 Réponses :
Si vous parlez d'utiliser un mécanisme de verrouillage (ou même des barrières de synchronisation), utilisez simplement un C'est tout fait sous les couvertures pour vous. P>
EDIT: P>
Non, passons sur les utilisations pratiques de Constructions de la concurrence, mais peut être très différente dans leur utilisation tout peut avoir les mêmes fonctions sous-jacentes. P>
I.e. Sous certains conditions Park, ce fil. Sous une autre condition, réveille un filetage. p>
Il s'agit d'un ensemble d'instructions très vastes, mais il est évident que la plupart des structures de concurrence auraient besoin de certaines fonctionnalités communes qui seraient capables de gérer ces opérations. Entrez des AQS. Il y a cinq barrières de synchronisation majeures. p>
Maintenant, toutes ces cinq structures ont un ensemble de règles très différent lors de leur utilisation. Un Les exemples peuvent continuer, mais la grande image ici est qu'elles utilisent tous des AQs. En effet, ils sont capables d'utiliser les fonctions primitives que AQS offre et implémente une fonctionnalité plus complexe sur le dessus. AQS vous permet de parcourir des threads d'imprécis et de réveil (de manière interruptible si besoin d'être) mais de telle manière que vous pouvez prendre en charge de nombreuses fonctions complexes. P> java.util.concurrent.lock code>. La suggestion évidente est d'utiliser un
reentrantlock code> quels délégués à un
Synch code>. Le synchronisation est un AQS qui utilise à son tour
locksupport code>. P>
abstractoStueSuiseSynchroniseur code> (AQS). P>
reentrantlock code> li>
Readock CODE> LI>
writelock code> li>
SEMAPHORE CODE> LI>
compteditiqueLatch code> li>
ul>
CountownLatch code> peut permettre à de nombreux filets de s'exécuter en même temps, mais oblige une (ou plusieurs) fils à attendre jusqu'à ce que au moins N nombre de threads comptent sur ledit loquet. P>
reentrantlock code> ne force qu'un seul fil à la fois pour entrer une section critique et les files d'attente de tous les autres threads pour attendre que cela soit terminé. P>
READOCK code> Permet un nombre de fils de lecture dans la section critique jusqu'à ce qu'un verrouillage écriture soit acquier. P>
W. Je voulais juste voir un morceau de code illustratif pour cela ...
@Max LocksUpport est une classe d'utilitaire que tout le monde peut utiliser. Ce n'est pas nécessairement une classe interne dangereux.java est un bon exemple de classe interne. LocksUpport est public pour que d'autres puissent écrire leur propre version de AQS
W.: Merci John, je sais que c'est pour la prolongation. Votre réponse m'a fait reformuler une question: Généralement, l'utilisation de abstractotiesseSynchroniseur code> semble vague pour moi.
Ils ne sont pas destinés à une utilisation directe dans le code du client; plus pour aider à construire de nouvelles classes simultanées. P>
AQS est une classe merveilleuse pour construire des primitives de concurrence - mais il est complexe et nécessite un peu d'étude pour l'utiliser correctement. Je l'ai utilisé pour quelques choses comme aussi complexe que c'est, je ne pense pas que les AQs sont particulièrement vagues, il a d'excellents Javadocs décrivant comment l'utiliser correctement. P>
java.util.concurrent.abstracttiqueEcèdeSynchroniseur
En fait: java.util.concurrent.locks.AbRacttiqueChroniseur
AFAIK, Abstract TremedSynchroniseur est utilisé pour gérer les transitions de l'état. Le JDK l'utilise pour étendre la synchronisation, une classe interne pour Java.Util.ConCurrent.FuTureTask. La classe de synchronisation gère les états (prêts, courir, couru et annulé) de FutureTask et les transitions entre eux. P>
Ceci permet, comme vous le savez peut-être, futueTask de bloquer sur futueTask.get () jusqu'à ce que l'état de RAN soit atteint, par exemple. P>
2.7 La libération du perturbateur utilise Locksupport.parknanos au lieu de thread.sleep pour réduire la latence: P>