Threads acessando uma região compartilhada por ambas.urgente

:eek:
Preciso resolver um problema no qual duas threads (servidora e cliente) fazem o seguinte:

Desenvolver um programa que utilize threads para acessarem uma região compartilhada por ambas.

A primeira thread deve escrever nesta região a string “abcde”, e então entrar em loop verificando o primeiro elemento desta string (o caractere “a”). Quando este elemento se tornar em um caractere “*”, então esta thread terminará. Uma mensagem de finalização (“Fim da thread servidora”) deverá ser emitida quando ocorrer este evento.

Uma outra thread deverá ler tudo o que for informado via teclado e, a cada caractere lido, inserí-lo no lugar do caractere “a” acima, na região compartilhada. Ao inserir o valor “*”, esta thread deverá ser finalizada, e então a mensagem “Fim da thread cliente” deverá ser emitida.

No caso teria que usar uma classe pra servidora e outra pra cliente. E depois uma que chame as duas ?

Aguardo contato.

RAPHA…

Isso está parecendo a implementação do Produtor/Consumidor.

Inicialmente implementa-se um produtor:

public class Producer extends Thread {
    private Product product;
    Producer(final Product product) {
        this.product = product;
    }

    public void run() {
        while (true) {
            try {
                produce();
                Thread.wait(500);
            } catch (Exception e) { }
        }
    }

    private void produce() throws Exception {
        product.produce();
    }
}

Depois o consumidor:

public class Consumer extends Thread {
    private Product product;
    Consumer(final Product product) {
        this.product = product;
    }

    public void run() {
        while (true) {
            try {
                consume();
                Thread.wait(500);
            } catch (Exception e) { }
        }
    }

    private void consume() throws Exception {
        product.consume();        
    }
}

O que vai ser consumido:

public class Product {
    private String content;
    public String getContent() { return this.content; }

    public synchronized void consume() throws Exception {
        if (this.content == null) {
            sysout("Nothing to consume...");
            wait();
        }
        sysout("Consuming: " + this.content);
        this.content = null;
        notifyAll();
    }

    public synchronized void produce() throws Exception {
        if (this.content != null) {
            sysout("Waiting to be consumed...");
            wait();
        }
        this.content = "new content";
        sysout("Produced: " + this.content);
        notifyAll();
    }
}

E finalmente o starter:

public class Starter {
    public static void main(String[] args) {
        Product product = new Product();
        Thread producer = new Producer(product);
        Thread consumer = new Consumer(product);
        producer.start();
        consumer.start();
    }
}

Dei uma testada e agora acho que está como deve ser. Faz os ajustes que são necessários pro teu caso, o caminho é este. T+

Alguém pode me dar uma luz neste problema de Threads.

Aguardo contato.

RAPHA…

O código que te passei não te ajudou? T+

Seguinte… o exemplo de produtor/consumidor é bem interessante. Mas pelo que já começei a fazer, seria necessário quatro classes: Servidora, Cliente, StarterThreads e AreaCompartilhada pra ficar bem organizado.

Preciso de uma luz pra entender melhor essa paradinha de threads. Sou iniciante nesse assunto. Preciso de ajuda!!!

Aguardo contato.

Se ficar melhor, poderiam entrar em contato comigo via msn. Se algúem interessar é so escrever nesse tópico.

RAPHA…

Se olhares o código, são as 4 classes que coloquei. Bem, infelizmente não uso msn. O que posso te ajudar está aí. Boa sorte, T+

Buenas cara…

Se tu quiser entender o conceito de threads… é uma coisa…

Agora se queres uma explicação do código é outra.

Pelo o que li na tua especificação tu tem uma thread que escreve os valores iniciais e depois fica num loop infinito até ele ler “*”.

Enquanto que a outra… vai escrevendo nessa area compartilhada o que o usuario entra de valores… até ai o codigo ta beleza…

Se quiser falar comigo… acessa o meu msn: felipelorenz@hotmai.com