Partition d'un Ensemble en sous-ensembles plus petits et les processus de lot

J'ai continu thread en cours d'exécution dans ma Demande , qui se compose d'un HashSet pour stocker tous les symboles à l'intérieur de l'Application .
Conformément à la conception, à l'époque où il fut écrit , à l'intérieur du Thread tandis que la condition est vérifiée, il réitérera le hashset continosly et les mises à jour de la Base de données pour tous les symboles contenus à l'intérieur de HashSet .

Max symboles qui pourraient être présents à l'intérieur de la hashset sera d'environ 6000 .
Je n'ai pas la db avec tous les 6000 symboles à la fois , mais de diviser ce hashset en différents sous-ensembles de 500 (12 ) et la réalisation de chaque sous-ensemble, individuellement et ont un Fil de sommeil après chaque sous-ensemble de 15 minutes , de sorte que je peux réduire la pression sur la Base de données .

C'est mon code (exemple de l'extrait de code )

Comment puis-je Partition d'un Ensemble en sous-ensembles plus petits et des processus , ( j'ai vu des exemples pour partioning ArrayList , TreeSet , mais ne trouve aucun exemple lié à HashSet )

package com.ubsc.rewji.threads;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.PriorityBlockingQueue;
public class TaskerThread extends Thread {
private PriorityBlockingQueue<String> priorityBlocking = new PriorityBlockingQueue<String>();
String symbols[] = new String[] { "One", "Two", "Three", "Four" };
Set<String> allSymbolsSet = Collections
.synchronizedSet(new HashSet<String>(Arrays.asList(symbols)));
public void addsymbols(String commaDelimSymbolsList) {
if (commaDelimSymbolsList != null) {
String[] symAr = commaDelimSymbolsList.split(",");
for (int i = 0; i < symAr.length; i++) {
priorityBlocking.add(symAr[i]);
}
}
}
public void run() {
while (true) {
try {
while (priorityBlocking.peek() != null) {
String symbol = priorityBlocking.poll();
allSymbolsSet.add(symbol);
}
Iterator<String> ite = allSymbolsSet.iterator();
System.out.println("=======================");
while (ite.hasNext()) {
String symbol = ite.next();
if (symbol != null && symbol.trim().length() > 0) {
try {
updateDB(symbol);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void updateDB(String symbol) {
System.out.println("THE SYMBOL BEING UPDATED IS" + "  " + symbol);
}
public static void main(String args[]) {
TaskerThread taskThread = new TaskerThread();
taskThread.start();
String commaDelimSymbolsList = "ONVO,HJI,HYU,SD,F,SDF,ASA,TRET,TRE,JHG,RWE,XCX,WQE,KLJK,XCZ";
taskThread.addsymbols(commaDelimSymbolsList);
}
}
Le concept de "pression" sur les Bases de données est étrange... DBs sont en général très bien en mesure de gérer cette "pression" gracieusement.

OriginalL'auteur Pawan | 2013-10-17