The constructor also starts the thread:
public ServerThread(ServerSocket ss, Configuration newConfig) {
super();
serverSocket = ss;
config = newConfig;
start();
}
By the time the ServerThread constructor returns, the thread has already been started, so you must not call start() outside the constructor.
Or, perhaps better, you could remove the start() call from the constructor, and limit it to its primary job of creating the ServerThread object.