protected int[] extractUsedObjectIDTable2()
{
// считаем количество по всем таблицам распаралеленно
final int[][] objCounts = new int[Tasks.objTables.length][];
ParallelExecutor multiextractor = new ParallelExecutor("extractUsedObjectIDTable::CountObjectIds", Thread.NORM_PRIORITY, Tasks.objTables.length);
try
{
for(int i = 0; i < Tasks.objTables.length; i++)
{
objCounts[i] = new int[2];
multiextractor.execute(new Tasks.CountObjectIds(Tasks.objTables[i], objCounts[i]));
}
multiextractor.waitForFinishAndDestroy();
}
catch(InterruptedException e)
{
e.printStackTrace();
Server.exit(0, "IdFactory::CountObjectIds");
}
// выставляем смещения для каждой таблици
int idx = 0;
for(int i = 0; i < objCounts.length; i++)
{
objCounts[i][1] = idx;
idx += objCounts[i][0];
}
int[] result = new int[idx];
_log.info("IdFactory: Extracting " + result.length + " used id's from data tables...");
// извлекаем идентификаторы по всем таблицам распаралеленно
multiextractor = new ParallelExecutor("extractUsedObjectIDTable::ExtractObjectIds", Thread.NORM_PRIORITY, Tasks.objTables.length);
try
{
for(int i = 0; i < Tasks.objTables.length; i++)
{
multiextractor.execute(new Tasks.ExtractObjectIds(Tasks.objTables[i], objCounts[i], result));
}
multiextractor.waitForFinishAndDestroy();
}
catch(InterruptedException e)
{
e.printStackTrace();
Server.exit(0, "IdFactory::ExtractObjectIds");