Rmi + Thread em java

Olá, sou novo no fórum e gostaria de um help de vocês. Assim estou implementando uma agenda utilizando RMI, e preciso criar uma thread para CADA USUÁRIO que entrar no servidor, ou seja, cada usuário terá uma thread rodando no servidor. No método run da thread, como irei informar o que o usuário optou, se foi uma busca, alteração ou exclusão? E como irei monitorar essas escolharsdo usuário na view e passar para a thread já iniciada no começo do programa?? Desde já agradeço.

Classe UsoAgenda
public class UsoAgenda implements Runnable{

Service service;

public UsoAgenda(Service service) {
    this.service = service;
}

@Override
public void run() {
}  

}
__________________-
classe ServeImpl (onde preciso criar as threads para usuário)

public class ControllerAgenda {

public ControllerAgenda() {
    evento = new Evento();
    eventos = new ArrayList<>();
}

public void iniciaServico() throws RemoteException {
    
    Client cliente = new Client();
    this.service = cliente.inicia();

    ViewAcessoUser acessoUser = new ViewAcessoUser();
    acessoUser.setVisible(true);
}

public Evento marcarCompromisso(String nome, String data, String hora, String desc) throws RemoteException {
    evento = service.marcarCompromisso(nome, data, hora, desc);
    return evento;
}

public ArrayList<Evento> attList() throws RemoteException {
    eventos = service.getEventos();
    return eventos;
}

}

Se você está usando RMI, por qual razão precisa de uma Thread para cada usuário logado?
O que exatamente você está tentando fazer?

Eu preciso criar uma Agenda Compartilhada, como eu falei,cada usuário que acessa-lá eu preciso criar uma thread no servidor para o mesmo. Porque todos terão acesso a mesma agenda, e ai por exemplo, quando um cliente quiser excluir e o outro quiser editar o mesmo evento, nessa parte eu preciso da thread pra dizer que apenas um cliente por vez, pode acessar o tal recurso.

Alguém pra uma força?? Preciso só de um caminho :pensive:

Como você está usando RMI, não vejo necessidade de criar Threads, basta você apenas sincronizar o acesso aos métodos de seu objeto que corresponde à agenda.

No caso, eu só preciso adicionar o synchronized nos métodos então?

Por exemplo:
public synchronized marcarCompromisso(String data, String hora) throws RemoteException {

}

Talvez, ou talvez precise implementar um semáforo…
Não sei como você implementou seu server nem os seus clientes.

1 curtida

Ah sim entendi, mas assim se eu for implementar o semáforo, provavelmente eu terei que utilizar as threads, ou não?

Tá, explica o que essas threads iriam fazer?

Penso ser desnecessário o uso de threads pois como você está usando RMI, cada client estará manipulando os objetos do seu server remotamente, a partir de outra máquina virtual.

Isto é, os seus clients por natureza já estarão disputando os recursos do seu server concorrentemente, como se fossem outras threads.

Ahhh sim entendi, então sem usar as threads eles já estão disputando os recursos tipo automaticamente né?

Creio então que não precisarei cria-las então né, como você mesmo disse, eu criei a thread apenas para atualizar a agenda.