Rmi + Thread em java

9 respostas
servidorthreadsprogramaçãojava
V

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() {
}
}

__________________<strong><strong><strong><strong><strong><strong><strong><strong>-</strong></strong></strong></strong></strong></strong></strong></strong>

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;
}

}

9 Respostas

S

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?

V

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.

V

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

S

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.

V

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

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

}

S

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

V

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

S

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.

V

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.

Criado 20 de novembro de 2018
Ultima resposta 25 de nov. de 2018
Respostas 9
Participantes 2