Gerenciar Threads

4 respostas
G

Boa tarde pessoal,

tenho que gerenciar algumas threads, para que cada uma imprima uma mensagem de cada vez no console, porém tenho que “simular” acessos a disco e chamando outra thread que estaria na fila de espera enquanto está thread executasse as funções do disco, e depois retornasse a memória, deixando a thread que começou o processo parada novamente.

Já dei uma pesquisada e encontrei a classe ThreadGroup e os metodos notify() e wait(), mas como é a primeira vez que me deparo com o problema estou meio confuso, de como dar o pontapé inicial, ouvi falar ainda que devo criar uma classe que extendesse Thread ou que implementasse Runnable, qual seria a melhor opção neste caso!

Obrigado Galera! =D

4 Respostas

A

oi,

Não é uma boa idéia você usar Thread Group, caso esteja usando JDK > 5 prefira usar os Executors

http://download.oracle.com/javase/tutorial/essential/concurrency/executors.html

Abs

F

É isso mesmo…vc pode usar a ThreadGroup ou não…Esse é o caminho.

  • Herdar de Thread, sua classe não pode mais herdar de nenhuma.
  • Implementar Runnabled, sua classe fica livre para herdar de qualquer outra.
G

Pessoal peguei o exemplo que me pareceu ser bem funcional, mas não sei nem como testar isso aqui, alguém pode me dar uma luz, segue o fonte:

public class GerenciaProcessos implements Executor{

    private Queue<Processo> fila = new ArrayDeque<Processo>();
    private Executor executor;
    private Runnable ativo;
    
    
    
    @Override
    public synchronized void execute(final Runnable command) {
        fila.offer(new Processo() {
            @Override
            public void run() {
                command.run();
                proximoProcesso();
            }       
        });
        if(ativo == null){
            proximoProcesso();
        }
    }
    
    protected synchronized void proximoProcesso(){
        if((ativo = fila.poll()) != null){
            executor.execute(ativo);
        }
    }
}

A classe processo está atualmente extendendo Thread e implementando Runnable.
Valeu mais uma vez!

A

oi,

A classe Processo não precisa extender Thread e implementar Runnable ao mesmo tempo, só implementar Runnable já basta (além de ser melhor pois em java só temos herança simples)

Para você controlar as Threads use a interface ExecutorServices que vai facilitar a sua vida

http://download.oracle.com/javase/1,5.0/docs/api/java/util/concurrent/ExecutorService.html

Veja um exemplo simples abaixo

http://www.deitel.com/articles/java_tutorials/20051126/JavaMultithreading_Tutorial_Part4.html

Abs

Criado 7 de junho de 2011
Ultima resposta 8 de jun. de 2011
Respostas 4
Participantes 3