HashMap pour enum clés
J'avais posté un peu la même question avant aussi. J'ai obtenu des éclaircissements pour mes doutes. Mais toujours j'ai besoin de quelque chose de plus. La table de hachage sera initialisé avec l'enum objet à la clé et un pool de threads d'occurrence de la valeur. Je suis confus de comment initialiser la table de hachage pour chaque objet été appelé par certains autres processus ..Pour faire clair :
Mon programme, MyThreadpoolExcecutorPgm.java initialise une HashMap
Mon Progran AdditionHandler.java demande un filetage à partir de la table de hachage en passant ThreadpoolName (enum). Je suis "Sans fil disponibles à partir de HashMap" message. Svp aider moi.
Ci-dessous mon code:
public class MyThreadpoolExcecutorPgm {
enum ThreadpoolName {
DR, BR, SV, MISCELLENEOUS;
}
private static String threadName;
private static HashMap<ThreadpoolName, ThreadPoolExecutor>
threadpoolExecutorHash;
public MyThreadpoolExcecutorPgm(String p_threadName) {
threadName = p_threadName;
}
public static void fillthreadpoolExecutorHash() {
int poolsize = 3;
int maxpoolsize = 3;
long keepAliveTime = 10;
ThreadPoolExecutor tp = null;
threadpoolExecutorHash = new HashMap<ThreadpoolName, ThreadPoolExecutor>();
for (ThreadpoolName poolName : ThreadpoolName.) //failing to implement
{
tp = new ThreadPoolExecutor(poolsize, maxpoolsize, keepAliveTime,
TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(5));
threadpoolExecutorHash.put(poolName, tp);
}
}
public static ThreadPoolExecutor getThreadpoolExcecutor(
ThreadpoolName poolName) {
ThreadPoolExecutor thread = null;
if (threadpoolExecutorHash != null && poolName != null) {
thread = threadpoolExecutorHash.get(poolName);
} else {
System.out.println("No thread available from HashMap");
}
return thread;
}
}
AdditionHandler.java
public class AdditionHandler{
public void handle() {
AddProcess setObj = new AddProcess(5, 20);
ThreadPoolExecutor tpe = null;
ThreadpoolName poolName =ThreadpoolName.DR; //i am using my enum
tpe = MyThreadpoolExcecutorPgm.getThreadpoolExcecutor(poolName);
tpe.execute(setObj);
}
public static void main(String[] args) {
AdditionHandler obj = new AdditionHandler();
obj.handle();
}
}
OriginalL'auteur vidhya | 2011-02-09
Vous devez vous connecter pour publier un commentaire.
Je soupçonne que vous êtes simplement à la recherche pour le statique
values()
méthode qui est ajouté à chaque enum:Alternativement, vous pouvez utiliser
EnumSet.allOf()
:(Comme Bozho dit,
EnumMap
est une bonne alternative. Vous avez encore besoin de faire une boucle par les valeurs enum.)Merci de poster un court mais programme qui illustre le problème. Je suppose que vous êtes l'obtention de la NullPointerException parce que vous êtes de retour d'une référence null à partir de getThreadpoolExcecutor. Quant à savoir pourquoi vous voyez "Pas de fil disponibles à partir de HashMap" - le message est trompeur, parce que tout cela signifie, c'est que ei9ther threadpoolExecutorHash est null, ou poolName est null. Découvrez qui.
Merci Jon ...pour ur les directions ...parce que j'ai ajouté à la suivante et maintenant mon programme est excecuting sans erreurs...statique { fillthreadpoolExecutorHash(); }
OriginalL'auteur Jon Skeet
Tout d'abord, vous feriez mieux d'utiliser
EnumMap
. Ensuite, assurez-vous d'avoir rempli la carte avant que vous avez appelé la méthode.OriginalL'auteur Bozho
Vous pouvez parcourir les valeurs de l'enum par l'un de (dans l'ordre décroissant de préférence)
Mais vous devez également être à l'aide d'un
EnumMap
.De ces trois options, je préfère la première le plus, et le dernier au moins.
J'ai eu ce - le pourquoi de la question - ne me répondez pas là, vous pouvez simplement modifier la réponse
C'est le plus court et le plus clair. C'était il y a longtemps, mais je suppose que je viens de donner une liste plus complète pour obtenir un
Collection<? extends Enum>
. Ce dernier serait utile si vous avez été en utilisant la réflexion.OriginalL'auteur OrangeDog