В каждой итерации создается поток "студент". Потому что эти потоки называются "студент". Может ли Java понять, что это разные потоки?
while (true) {
System.out.println("Waiting for client...");
// open client socket to accept connection
client = server.accept();
System.out.println(client.getInetAddress()+" contacted ");
System.out.println("Creating thread to serve request");
ServerStudentThread student = new ServerStudentThread(client);
student.start();
}