java atteindre trois méthodes de producteurs et les consommateurs

Lorsque la conception et la mise en œuvre du modèle, nous devons faire attention aux trois questions suivantes:

Lorsque la synchronisation du récipient et ajouter ce produit à prendre le produit, à savoir tout moment, en ajoutant prises sont mutuellement exclusifs, et chaque fois prélevé est opérations mutuellement exclusives (opération d'addition est également vrai).

Méthode 1:
Utiliser wait () et notify (), lorsque le récipient est plein, les producteurs doivent production arrêter temporairement jusqu'à ce que le récipient ne soit pas pleine, lorsque le réservoir est vide, les consommateurs doivent passer temporairement arrêt jusqu'à ce que le récipient ne soit pas vide, un tampon après avoir attendu les appels pleins et vides de la méthode d' attente (), jusqu'à ce que les producteurs pour produire un produit ou d' un produit que les dépenses de consommation se réveillera tous les fils.

Méthode 2:
la méthode await () et un signal (), à savoir manière d' un fil de verrouillage.
verrouillage rentrante peut être réalisé (de ReentrantLock) a.
serrures rentrants, également connu sous le nom de verrouillage récursif, après avoir fait référence au même fil pour acquérir la fonction de verrouillage de la couche externe, couche intérieure toujours fonction récursive pour acquérir le code de verrouillage, mais ne sont pas affectées.
En termes simples, le verrou maintient celui - ci en rapport avec compteur de verrouillage d'accès, si le verrou a été un verrou de fil à nouveau, le compteur d'acquisition est augmenté, la fin du compteur d'appel de fonction est décrémenté de 1, puis deux fois aux besoins de verrouillage pour être libéré obtenir une libération réelle.
Déjà acquis un fil de verrouillage dans l'autre bloc synchronisé nécessite le même verrou , il ne sera pas bloqué.

Méthode 3:
pour obtenir la file d' attente de blocage (BlockingQueue) a.
La condition principale est bloquée suivant deux:
1. Lorsque la file d' attente est pleine lorsqu'ils sont transportés dans les files d' attente
2. Lorsque le temps d'attente pour une opération de file d'attente vide

Quand un thread est pleine d'opération de blocage file d'attente enqueue sera bloquée, à moins d'un autre thread a été une opération d'équipe, lorsqu'un thread est bloqué sur une opération de file d'attente dequeue vide sera bloqué, sauf indication contraire un fil dans l'équipe d'exploitation. Par conséquent, la file d'attente de blocage est thread-safe.

Publié 53 articles originaux · louange gagné 5 · Vues 435

Je suppose que tu aimes

Origine blog.csdn.net/qq_45287265/article/details/104991518
conseillé
Classement