Como tornar este código Thread-Safe?

Bom dia galera!

Estou com a missão de continuar um sistema aqui da empresa que foi parado pois o funcionário antigo saiu e ninguém fez mais conta, e agora está em minhas mãos.
É um sistema de dados da empresa, feito com swing e vai ser usado por diversos clientes(outros setores, administrativo, marketing etc).

O problema que estou no momento é deixar ele concorrente, pois terão diversos clientes acessando ao mesmo tempo o banco de dados. A comunicação distribuída está sendo feita via RMI.

meu cliente da comunicação é esta classe:

public class Client{

	private IRemote remote;
	
	public void connectServer(int porta, String server) throws RemoteException, RecordNotFoundException, NotBoundException{
		Registry registry = LocateRegistry.getRegistry(server,porta);
		setRemote((IRemote) registry.lookup("server"));
	}
	 
        public void delete(Entidade en){
                 getRemote.delete(en);
        }

         public Entidade create(Entidade en){
                return getRemote.create(en);
       }
           //getters ands setters IRemote

minha classe servidor que recebe a chamada e chama o DAO pra executar no banco.

//IRemote é uma Interface que extends Remote
public class Remote implements IRemote {
	private Dao dao;
	private Registry registry;


       public void connect(int porta) throws RemoteException {
		try {
			IRemote server = (IRemote) 
					UnicastRemoteObject.exportObject(this,0);
			setRegistry(LocateRegistry.createRegistry(porta));
			getRegistry().rebind("server", server);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

        public void delete(Entidade en){
                 dao.delete(en);
        }

         public Entidade create(Entidade en){
                return dao.create(en);
       }

agora desse jeito ele responde as chamadas, mas não está thread-safe obviamente, pois não usei thread em nada.

pensei no server fazer isso:

public class Remote implements IRemote  extends Thread{
	private Dao dao;
	private Registry registry;
        private Entidade en;
        //getters and setters

        public void run(){
                 while(true){
                      // this.delete()  ou this. crete ou qualquer outro

                     // um dos problemas é como vou saber qual dos métodos abaixo foi invocado 
                    // e chamar ele daqui do run()
                       
                 }
        }

       public void connect(int porta) throws RemoteException {
		//codigo connect acima
	}

        public void delete(){
                 dao.delete(this.en);
        }

         public Entidade create(){
                return dao.create(this.en);
       }

meus métodos na Dao estão todos preparados com syncronized para a concorreência.
entenderam meu problema ? não estou conseguindo implementar uma maneira boa de fazer essa concorrência funcionar.
Sugestões?