С твим кодом влом разбираться. Вот например, как пул тредов делают.
Все ServerThread'ы будут мирно спать, пока не придет коннекшен. Когда он придет, какой-либо тред пробудится, обработает его и опять заснет.
И не надо никаких join'ов.
Код: Выделить всё
class ServerThread extends Thread {
...
public void run() {
while(true) {
Connection conn = Listener.getInstance().getConnection();
if(conn == null) { break; }
// Работаем с соединением
}
}
}
//-----------------------------------------
class Listener extends Thread {
private Listener() {};
private static final Listener theInstance = new Listener();
private final List connections = new LinkedList();
public Listener getInstance() {
return theInstance;
}
public void run() {
while(true) {
//..
Connection conn = serverSocket.accept();
acceptConnection(conn);
}
}
private synchronized void acceptConnection (Connection conn) {
connections.add(conn);
notifyAll();
}
// ...
public synchronized Connection getConnection() {
//...
while ( connections.isEmpty() ) {
try {
wait();
} catch (InterruptedException e) {
// ignored
}
}
return connections.remove(0);
}
}