Maison Java javaDidacticiel Threads virtuels et pools de threads Java: pourquoi la réutilisation des threads virtuels dans les pools de threads virtuels échoue-t-il?

Threads virtuels et pools de threads Java: pourquoi la réutilisation des threads virtuels dans les pools de threads virtuels échoue-t-il?

Apr 19, 2025 pm 09:06 PM
Pourquoi

Threads virtuels et pools de threads Java: pourquoi la réutilisation des threads virtuels dans les pools de threads virtuels échoue-t-il?

Filetages virtuels et piscines virtuels Java: analyse de mécanisme collaboratif approfondi

Cet article analyse la cause profonde de threads virtuels qui ne peuvent pas exécuter normalement dans un pool de threads virtuel créé à l'aide Executors.newVirtualThreadPerTaskExecutor() et fournit une solution efficace. Le problème est clarifié en comparant les deux méthodes de methods5 et methods6 à travers des exemples de code. methods6 (exécuter des threads normaux dans le pool de threads normal) peut imprimer les journaux normalement, tandis que methods5 (essayant de réutiliser des threads virtuels pré-créés dans le pool de threads virtuels) échoue.

methods5 tente de soumettre à plusieurs reprises le même objet de thread virtuel vt au pool de threads virtuels. Cependant, cela va à l'encontre de la philosophie de conception des Executors.newVirtualThreadPerTaskExecutor() . Ce pool de threads est conçu pour créer un nouveau thread virtuel pour chaque tâche, plutôt que de réutiliser des threads existants. executor.submit(vt) s'attend à recevoir des objets Runnable ou Callable , tandis que vt est un objet Thread , mais n'est pas Runnable ou Callable , il ne peut donc pas être exécuté comme prévu.

La solution est la suivante:

Solution 1: Soumettre directement l'objet Runnable

Évitez de pré-création des threads virtuels et de soumettre des objets Runnable directement dans le pool de threads virtuels. Les methods5 améliorées5 sont les suivantes:

 Méthodes de vide statique privés5 () {
  Try (ExecutorService exécutor = exécutor.NewVirtualThreadperTasKexECUTOR ()) {
      pour (int i = 0; i  {
              System.out.println ("Task VT Exécuté.");
          });
      }
  }
}
Copier après la connexion

Ce schéma soumet les expressions lambda en tant qu'objets Runnable , en utilisant pleinement les caractéristiques des pools de threads virtuels et génère de nouveaux threads virtuels pour chaque tâche.

Schéma 2: Utilisez un objet Thread, mais recréez-le à chaque fois

Bien qu'il ne soit pas recommandé, si vous devez utiliser des objets Thread , vous devez créer un nouvel objet Thread à chaque fois que vous soumettez une tâche pour éviter la réutilisation. Cette méthode est inefficace et contraire à l'intention d'origine de concevoir des pools de threads virtuels.

De plus, l'article souligne que la mise en commun des threads n'est pas une stratégie d'optimisation nécessaire pour les threads virtuels, car les frais généraux de création et de destruction de threads virtuels sont extrêmement faibles. Executors.newVirtualThreadPerTaskExecutor() lui-même a entièrement utilisé les fonctionnalités légères des threads virtuels. Trop de mise en commun augmentera le fardeau de la gestion et réduira les performances. Par conséquent, la méthode d'utilisation directement executor.submit(() -> { ... }); est plus conforme aux caractéristiques des threads virtuels et est plus concis et plus efficace.

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Impossible de se connecter à MySQL en tant que racine Impossible de se connecter à MySQL en tant que racine Apr 08, 2025 pm 04:54 PM

Les principales raisons pour lesquelles vous ne pouvez pas vous connecter à MySQL en tant que racines sont des problèmes d'autorisation, des erreurs de fichier de configuration, des problèmes de mot de passe incohérents, des problèmes de fichiers de socket ou une interception de pare-feu. La solution comprend: vérifiez si le paramètre Bind-Address dans le fichier de configuration est configuré correctement. Vérifiez si les autorisations de l'utilisateur racine ont été modifiées ou supprimées et réinitialisées. Vérifiez que le mot de passe est précis, y compris les cas et les caractères spéciaux. Vérifiez les paramètres et les chemins d'autorisation du fichier de socket. Vérifiez que le pare-feu bloque les connexions au serveur MySQL.

Comment récupérer les données après que SQL supprime les lignes Comment récupérer les données après que SQL supprime les lignes Apr 09, 2025 pm 12:21 PM

La récupération des lignes supprimées directement de la base de données est généralement impossible à moins qu'il n'y ait un mécanisme de sauvegarde ou de retour en arrière. Point clé: Rollback de la transaction: Exécutez Rollback avant que la transaction ne s'engage à récupérer les données. Sauvegarde: la sauvegarde régulière de la base de données peut être utilisée pour restaurer rapidement les données. Instantané de la base de données: vous pouvez créer une copie en lecture seule de la base de données et restaurer les données après la suppression des données accidentellement. Utilisez la déclaration de suppression avec prudence: vérifiez soigneusement les conditions pour éviter la suppression accidentelle de données. Utilisez la clause WHERE: Spécifiez explicitement les données à supprimer. Utilisez l'environnement de test: testez avant d'effectuer une opération de suppression.

Méthode de Navicat pour afficher le mot de passe de la base de données MongoDB Méthode de Navicat pour afficher le mot de passe de la base de données MongoDB Apr 08, 2025 pm 09:39 PM

Il est impossible de visualiser le mot de passe MongoDB directement via NAVICAT car il est stocké sous forme de valeurs de hachage. Comment récupérer les mots de passe perdus: 1. Réinitialiser les mots de passe; 2. Vérifiez les fichiers de configuration (peut contenir des valeurs de hachage); 3. Vérifiez les codes (May Code Hardcode).

Comment afficher le mot de passe de la base de données dans NAVICAT pour MARIADB? Comment afficher le mot de passe de la base de données dans NAVICAT pour MARIADB? Apr 08, 2025 pm 09:18 PM

NAVICAT pour MARIADB ne peut pas afficher directement le mot de passe de la base de données car le mot de passe est stocké sous forme cryptée. Pour garantir la sécurité de la base de données, il existe trois façons de réinitialiser votre mot de passe: réinitialisez votre mot de passe via Navicat et définissez un mot de passe complexe. Affichez le fichier de configuration (non recommandé, haut risque). Utilisez des outils de ligne de commande système (non recommandés, vous devez être compétent dans les outils de ligne de commande).

Comment installer MySQL dans CentOS7 Comment installer MySQL dans CentOS7 Apr 14, 2025 pm 08:30 PM

La clé de l'installation de MySQL est d'élégance pour ajouter le référentiel MySQL officiel. Les étapes spécifiques sont les suivantes: Téléchargez la clé GPG officielle MySQL pour empêcher les attaques de phishing. Ajouter un fichier de référentiel MySQL: RPM -UVH https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm Mise à jour du référentiel Cache: Yum Update Installation Mysql: Yum install install install starting starting mysql Service: SystemCTL start start mysqld starger bugo boartup Service mysql Service: SystemCTL start start mysqld starger bugo bo onthing staring Service mysql Service: SystemCTL Start Start MySQLD Set Out Up Boaching Staring Service MySQL Service: SystemCTL Start Start MysQL

Centos arrête la maintenance 2024 Centos arrête la maintenance 2024 Apr 14, 2025 pm 08:39 PM

Centos sera fermé en 2024 parce que sa distribution en amont, Rhel 8, a été fermée. Cette fermeture affectera le système CentOS 8, l'empêchant de continuer à recevoir des mises à jour. Les utilisateurs doivent planifier la migration et les options recommandées incluent CentOS Stream, Almalinux et Rocky Linux pour garder le système en sécurité et stable.

Méthode de Navicat pour afficher le mot de passe de la base de données SQLite Méthode de Navicat pour afficher le mot de passe de la base de données SQLite Apr 08, 2025 pm 09:36 PM

Résumé: Navicat ne peut pas afficher les mots de passe SQLite car: SQLite n'a pas de champs de mot de passe traditionnels. La sécurité de SQLite repose sur le contrôle d'autorisation du système de fichiers. Si le mot de passe du fichier est oublié, il ne peut pas être récupéré (sauf si la base de données est cryptée, la clé est requise).

Comment afficher les catégories d'enfants sur la page des archives des catégories de parents Comment afficher les catégories d'enfants sur la page des archives des catégories de parents Apr 19, 2025 pm 11:54 PM

Voulez-vous savoir comment afficher les catégories d'enfants sur la page des archives de la catégorie parent? Lorsque vous personnalisez une page d'archive de classification, vous devrez peut-être le faire pour le rendre plus utile à vos visiteurs. Dans cet article, nous vous montrerons comment afficher facilement les catégories d'enfants sur la page des archives de la catégorie parent. Pourquoi les sous-catégories apparaissent-elles sur la page des archives de la catégorie des parents? En affichant toutes les catégories d'enfants sur la page des archives de la catégorie parent, vous pouvez les rendre moins génériques et plus utiles aux visiteurs. Par exemple, si vous exécutez un blog WordPress sur les livres et que vous avez une taxonomie appelée "thème", vous pouvez ajouter une sous-taxonomie telle que "roman", "non-fiction" afin que vos lecteurs puissent

See all articles