package com.hwlcn.ldap.ldap.sdk;
import java.util.ArrayList;
import java.util.Collection;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import com.hwlcn.ldap.util.Debug;
final class ParallelPoolCloser
{
private final boolean unbind;
private final Collection<LDAPConnection> connections;
private final int numThreads;
ParallelPoolCloser(final Collection<LDAPConnection> connections,
final boolean unbind, final int numThreads)
{
this.connections = connections;
this.unbind = unbind;
this.numThreads = numThreads;
}
void closeConnections()
{
final int numConnections = connections.size();
final ArrayBlockingQueue<Runnable> queue =
new ArrayBlockingQueue<Runnable>(numConnections);
final ThreadPoolExecutor executor = new ThreadPoolExecutor(numThreads,
numThreads, 0L, TimeUnit.MILLISECONDS, queue);
final ArrayList<Future<?>> results =
new ArrayList<Future<?>>(numConnections);
for (final LDAPConnection conn : connections)
{
results.add(executor.submit(new ParallelPoolCloserTask(conn, unbind)));
}
for (final Future<?> f : results)
{
try
{
f.get();
}
catch (final Exception e)
{
Debug.debugException(e);
}
}
executor.shutdown();
}
}