import java.util.Enumeration;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
/**
* Manages active TCP connections.
*/
public ConcurrentHashMap<Long, NetworkStream> _tcpStreams;
+ /**
+ * Thread manager
+ */
+ private final ExecutorService _pool;
+
/**
* Default constructor.
*/
public NetworkStreamManager() {
random = new Random();
_tcpStreams = new ConcurrentHashMap<>();
+ _pool = Executors.newCachedThreadPool();
}
/**
_tcpStreams.put(tempKey, netStream);
result = tempKey;
netStream._key = tempKey;
- netStream.execute();
+ _pool.execute(netStream);
}
else {
if ((userID < 0 && userID > TEMPCLIENT) || userID > 0) {
_tcpStreams.put(userID, netStream);
result = userID;
netStream._key = userID;
- netStream.execute();
+ _pool.execute(netStream);
}
}
}
_tcpStreams.get(key).close(); // close the network stream
_tcpStreams.remove(key);
}
+ _pool.shutdown();
+ try {
+ result = _pool.awaitTermination(30, TimeUnit.SECONDS);
+ if (!result) {
+ _pool.shutdownNow();
+ result = _pool.awaitTermination(30, TimeUnit.SECONDS);
+ }
+ } catch (InterruptedException ex) {
+ _pool.shutdownNow();
+ Thread.currentThread().interrupt();
+ }
return result;
}