Articles of java.util.concurrent

Puis-je utiliser des threads appelables sans ExecutorService?

Puis-je utiliser des threads appelables sans ExecutorService? Nous pouvons utiliser des instances de Runnable et des sous-classes de Thread sans ExecutorService et ce code fonctionne normalement. Mais ce code fonctionne de manière cohérente: public class Application2 { public static class WordLengthCallable implements Callable { public static int count = 0; private final int numberOfThread = […]

Utilisation du ThreadPool Java

J’essaie d’écrire un robot Web multithread. Ma classe d’entrée principale a le code suivant: ExecutorService exec = Executors.newFixedThreadPool(numberOfCrawlers); while(true){ URL url = frontier.get(); if(url == null) return; exec.execute(new URLCrawler(this, url)); } URLCrawler extrait l’URL spécifiée, en parsing les extraits extraits au format HTML et planifie les liens invisibles vers la frontière. Une frontière est une […]

Scala Map et ConcurrentHashMap émettent une exception java.lang.UnsupportedOperationException

Avec ce code simple import scala.collection.JavaConversions._ new java.util.concurrent.ConcurrentHashMap[Ssortingng,Ssortingng] ().toMap.put(“abc”,”def”) Scala lance une exception java.lang.UnsupportedOperationException. Pourquoi ?

Comment l’atomicité est-elle réalisée dans les classes définies dans le package java.util.concurrent.atomic?

Je parcourais le code source de java.util.concurrent.atomic.AtomicInteger pour savoir comment l’atomicité est réalisée par les opérations atomiques fournies par la classe. Par exemple, la source de la méthode AtomicInteger.getAndIncrement () est la suivante public final int getAndIncrement() { for (;;) { int current = get(); int next = current + 1; if (compareAndSet(current, next)) return […]

AtomicInteger incrementAndGet atomicity

AtomicInteger.incrementAndGet () est atomique selon la documentation. Cependant, dans son code source ci-dessous, que se passe-t-il si un autre thread s’entrelace juste avant “return next”? “Suivant” sera incorrect alors? public final long incrementAndGet() { for (;;) { long current = get(); long next = current + 1; if (compareAndSet(current, next)) return next; } }

Besoin de synchroniser manuellement la liste synchronisée lors d’une itération quand elle pourrait être évitée?

Ma question concerne la méthode synchronizedList Collections Class. Les Javadocs disent: It is imperative that the user manually synchronize on the returned list when iterating over it: List list = Collections.synchronizedList(new ArrayList()); … synchronized(list) { Iterator i = list.iterator(); // Must be in synchronized block while (i.hasNext()) foo(i.next()); } Bien que la synchronisation manuelle ne […]

ExecutorService.invokeAll NE prend PAS en charge la collecte de tâches exécutables.

Voulait exécuter une collection de tâches exécutables via la méthode invokeAll (..) de ExecutorService . Mais ce n’est pas pris en charge pour l’instant ( prend en charge la collecte de tâches appelables uniquement ) Une raison spécifique à cela? Quelle est l’alternative de faire quelque chose de similaire.

Exécution périodique d’un appelable via ScheduledExecutorService

J’ai un Callable . Je veux l’exécuter périodiquement via ScheduledExecutorService.scheduleAtFixedRate() et obtenir une liste de toutes les chaînes qui ont été retournées par les invocations .call() sur mon callable. Comme scheduleAtFixedRate ne prend pas un Callable (uniquement des Runnable ), je dois déployer un Runnable personnalisé qui enveloppe mon Callable , ce qui suit: final […]

Comment implémenter consommateur-producteur avec plusieurs consommateurs et plusieurs files d’attente

Supposons qu’il y a 1 producteur P et 2 consommateurs C1 et C2. Et il y a 2 files d’attente Q1 et Q2, les deux avec une capacité spécifique. P produira des articles et les mettra alternativement aux Q1 et Q2. L’article est produit pour un consommateur spécifique et ne peut pas être consommé par […]

Entrée `next` différente de ConcurrentHashMap dans JDK 1.6 et JDK 1.7

Dans JDK 1.6, Doug Lea utilise final avant le champ next . static final class HashEntry { final K key; final int hash; volatile V value; final HashEntry next; Dans JDK 1.7, le champ next est précédé de volatile . Je remarque également que dans JDK 1.7, la méthode get adopte la méthode getObjectVolatile pour […]