Escuchando dos puertos simultáneamente en un servidor Java usando subprocesos múltiples

Estoy creando un servidor Java simple que escucha simultáneamente la solicitud del cliente en dos puertos simultáneamente utilizando dos instancias de ServerSocket. Aquí está el código para el servidor:

import java.io.PrintWriter;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

class Socket1 implements Runnable
{
    public void run()
    {
        try
        {
            ServerSocket serverSock=new ServerSocket(5000);
            while(true)
            {
                Socket sock=serverSock.accept();
                PrintWriter writer=new PrintWriter(sock.getOutputStream());
                String text="Welcome to Port 5000";
                writer.println(text);
            }
        }
        catch(Exception e)
        {
            System.out.println("Error");
        }
    }
}

class Socket2 implements Runnable
{
    public void run()
    {
        try
        {
            ServerSocket serverSock=new ServerSocket(3000);
            while(true)
            {
                Socket sock=serverSock.accept();
                PrintWriter writer=new PrintWriter(sock.getOutputStream());
                String text="Welcome to Port 3000";
                writer.println(text);
            }
        }
        catch(Exception e)
        {
            System.out.println("Error");
        }
    }
}

public class Server
{
    public static void main(String[] args)
    {
        Socket1 s1=new Socket1();
        Socket2 s2=new Socket2();
        Thread t1=new Thread(s1);
        Thread t2=new Thread(s2);
        t1.start();
        t2.start();
    }
} 

Ahora código para Client1:

import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.net.Socket;

public class Client1
{
    public static void main(String[] args)
    {
        try
        {
            Socket s=new Socket("127.0.0.1", 5000);
            InputStreamReader streamReader=new InputStreamReader(s.getInputStream());
            BufferedReader reader=new BufferedReader(streamReader);
            String text=reader.readLine();
            System.out.println(text);
            reader.close();
        }
        catch(Exception e)
        {
            System.out.println("Error");
        }
    }
}

Client2 contiene el mismo código que Client1, la única diferencia es que intenta conectarse al puerto 3000. Ahora, ejecuto Server.java primero usando el símbolo del sistema. Mientras el servidor se bloquea, abro dos solicitudes de comando separadas y ejecuto Client1.java en una línea de comandos y Client2.java en la otra línea de comandos. Pero, ambos clientes pasan al estado de bloqueo y no obtengo salida. Alguna idea de como resolver esto ?

Respuestas a la pregunta(2)

Su respuesta a la pregunta