Threads

6 respostas
edymrex

Bem estou começando meu estudo sobre threads é estou com algumas dúvidas…

Qual a forma mais simples de trabalhar com threads…?

Bem a forma que estou estudando e implementando a interface Runnable
vou deixar o código que eu criei para ficar mais clara minha dúvida:

package com.multithreading;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class Threads implements Runnable
{
	private String nome_thread;
	private long temp;
	
	public Threads(String nome_thread,int temp)
	{
		
		try
		{
			this.nome_thread=nome_thread;	
			this.temp=temp;
			Thread.sleep(temp);
			
		}
		catch(InterruptedException e)
		{
			e.printStackTrace();
		}
		
		
		System.out.println("dormindo"+ this.nome_thread);
		
		
		
	}

	public void run() 
	{
		 // Método que vai rodar a thread
		
		JTextArea text = new JTextArea(5,5);
		JScrollPane scroll = new JScrollPane(text);
		
		String th="Olá sou a thread "+this.nome_thread;
		
		text.setText(th);
		
		JOptionPane.showMessageDialog(null, text);
		
	}
	

}

class Executa
{

	
	public static void main(String args[])
	{
		Threads chama = new Threads("thread1",10000);
		Threads chama1 = new Threads("thread2",500);
		Threads chama2 = new Threads("thread3",250);
		
		System.out.println("Iniciando as threads");
		
		ExecutorService executaThread = Executors.newFixedThreadPool(3);
		
		
		executaThread.execute(chama);
		executaThread.execute(chama1);
		executaThread.execute(chama2);
		
	}
	  
}

Bem reparem que a thread1 vai demorar bem mais que as outras…
como eu posso fazer que as outras threads sejam executadas enquanto
a thread1 dorme…?

6 Respostas

rodolfogs8

eu aconselho extends Thread

edymrex

Porque cara…?

Bravox

não sei se existe a melhor forma mas se sua classe for somente uma trhead basta ela estender a classe Thread agora se ela precisar ser algo mais do que uma trhead ai vc implemta a interface Runnable

Puppets:

como eu posso fazer que as outras threads sejam executadas enquanto
a thread1 dorme…?

o interessante seria vc usar o conceito de monitores para fazer isso aqui no guj tem um artigo sobre esse assunto

davidbuzatto

Vários livros dizem para se implementar a interface Runnable ao invés de extender a classe Thread, usando o construtor da classe Thread que recebe um Runnable como argumento, ou então passar direto como vc passou para o ExecutorService.

Abraço!

Emerson_Macedo

E queimar a herança atoa por que ?

ViniGodoy

Realmente extends thread não é uma boa. Nem sequer é recomendado.

Para estudar Threads com sucesso, faça as seguintes distinções:

Thread: É a linha de execução. Não é uma classe. Não é um código. Não é um objeto. É um pequeno pedacinho do seu programa “rodando”. Cada pedacinho rodando em paralelo é outra thread.

Classe Thread e classe ExecutorsService: São motores de execução. Ou seja, eles criam novas threads e as descrevem, mas eles não são as threads em si. Novamente, threads não são classes.

Sincronização: Sincroniza um trecho de código no contexto de um objeto. Ou seja, objetos diferentes, mesmo que de classes iguais, poderão ser percorridos por threads diferentes ao mesmo tempo, mesmo que seu código seja sincronizado. O que não poderá acontecer é a duas threads, no mesmo objeto, entrarem num trecho sincronizado.

Runnable e Callable: São interfaces que definem onde uma thread irá iniciar e quando ela irá finalizar. São a forma como você se comunica com o seu motor, ou seja, com a classe Thread ou ExecutorsService. Uma classe que implementa Runnable não é uma Thread, porque classes não são Threads. O método start() sim, criará uma thread que comecará a executar o código do Runnable.

Acho que esses 3 tópicos correspondem a uns 80% das confusões que vejo o pessoal aqui do GUJ que está começando no assunto cometer.

Criado 3 de outubro de 2007
Ultima resposta 3 de out. de 2007
Respostas 6
Participantes 6