Salve a tutti,
vorrei scrivere un server, che utilizzi le Socket, e che sia  MultiThreading.
Il codice del Server non MultiThreading è il seguente:
// Main.java
import java.io.IOException;
public class Main {
	static Server server;
	public static void main(String[] args) throws IOException {
		server = new Server();
		}
}
// Server.java
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
	public Server() throws IOException {
        try (ServerSocket server = new ServerSocket(80)) {
            while (true) {
                try (Socket socket = server.accept()) {
                    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                    out.println("Hello World!");
                    socket.close();
                }
            }
        }
	}
}
il codice MultiThreading è il seguente:
// Main.java
import java.io.IOException;
public class Main {
	static Server server;
	public static void main(String[] args) throws IOException {
		server = new Server();
		}
}
// Server.java
iimport java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
	ServerSocket server;
	public Server() throws IOException {
        server = new ServerSocket(80);
        while (true) {
            try (Socket socket = server.accept()) {
            	Connessioni nuovaConnessione = new Connessioni(socket);     	
           	 }
	     }
	}
}
// Connessioni.java
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
public class Connessioni extends Thread{
	Socket socket;
	PrintWriter out;
	public Connessioni(Socket socket) throws IOException {
		this.socket = socket;
		this.start();
	}
	public void run() {
		try {
			PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
			out.println("Hello World!");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
Tale codice mi restituisce il seguente errore:
java.net.SocketException: Socket is closed
ovvero, alla riga seguente, il socket risulta chiuso:
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
Dove sbaglio?
Grazie in anticipo a tutti.