Sites de test communs pour les entretiens de simultanéité Java

Travailler ensemble pour créer et grandir ensemble ! C'est le 13ème jour de ma participation au "Nuggets Daily New Plan · August Update Challenge", cliquez pour voir les détails de l'événement

1. Comment JAVA démarre-t-il un thread ? Comment assurer la sécurité des threads ?

La différence entre thread et process :

Un processus est la plus petite unité d'allocation de ressources par le système d'exploitation. Un thread est la plus petite unité d'allocation de tâches par le système d'exploitation, et un thread appartient à un processus.

Comment démarrer un fil ?

1. Héritez de la classe Thread et remplacez la méthode run. 2. Implémentez l'interface Runnable et implémentez la méthode d'exécution. 3. Implémentez l'interface Callable et implémentez la méthode d'appel. Créez un thread via FutureTask et obtenez la valeur de retour de l'exécution du thread. 4. Démarrez le thread via le pool de threads.

Comment assurer la sécurité des threads ?

Verrouillage :
1. Le verrou fourni par la JVM, c'est-à-dire le mot-clé Synchronized. 2. Divers verrous fournis par JDK.

2. Quelle est la différence entre Volatile et Synchronisé ? Volatile peut-il garantir la sécurité des threads ? Pourquoi le singleton DCL (Double Check Lock) devrait-il ajouter Volatile ?

1. Mot-clé synchronisé, utilisé pour verrouiller. Volatile conserve simplement la visibilité du thread de la variable. Il convient généralement à un scénario dans lequel un thread écrit et plusieurs threads lisent.

2, ne peut pas. Le mot-clé Volatile ne peut garantir que la visibilité du thread, pas l'atomicité.

3. La volatilité empêche le réarrangement des instructions. Dans DCL, les problèmes de sécurité des threads causés par le réarrangement des instructions sont évités en cas de forte simultanéité.

3. Qu'est-ce que le mécanisme de verrouillage de thread JAVA ? Quelle est la différence entre le verrouillage de biais, le verrouillage léger et le verrouillage lourd ? Comment le mécanisme de verrouillage est-il mis à niveau ?

1. Le verrou de JAVA consiste à enregistrer un état de verrou dans le Markword de l'objet. Aucun verrou, verrous biaisés, verrous légers et verrous lourds correspondent à différents états de verrouillage.

2. Le mécanisme de verrouillage de JAVA est un processus d'escalade continue de verrouillage en fonction de l'intensité de la concurrence des ressources.

3. [Le transfert d'image du lien externe a échoué, le site source peut avoir un mécanisme anti-leech, il est recommandé de sauvegarder l'image et de la télécharger directement (img-YOu2Avtf-1660623748395) (1615192248858.png)]

Quatrièmement, parlez de votre compréhension de l'AQS. Comment AQS implémente-t-il les verrous réentrants ?

1. AQS est un framework de synchronisation de threads JAVA. C'est le cadre d'implémentation de base de nombreux outils de verrouillage du JDK.

2. Dans AQS, une file d'attente de liste doublement chaînée composée d'un état de sémaphore et d'un fil est maintenue. Parmi eux, la file d'attente de threads est utilisée pour mettre le thread en file d'attente, et l'état est comme un feu de signalisation, qui est utilisé pour contrôler la file d'attente ou la libération du thread. Dans différents scénarios, il existe différentes significations.

3. Dans le cas des verrous réentrants, l'état est utilisé pour représenter le nombre de verrous. 0 indique qu'il n'y a pas de verrou, et chaque fois qu'un verrou est ajouté, l'état est incrémenté de 1. Lorsque le verrou est relâché, l'état est décrémenté de 1.

5. Il y a trois threads A, B et C. Comment s'assurer que les trois threads sont exécutés en même temps ? Comment s'assurer que les trois threads sont exécutés séquentiellement en cas de concurrence ? Comment assurer l'entrelacement ordonné des trois threads ?

CountDownLatch, CylicBarrier, Sémaphore。

Guess you like

Origin juejin.im/post/7135846871754342430