Duvida Thead

13 respostas
augustopovoa

O que está linha faz?

thread = new Thread(new EnviandoArquivos(diretorio_nf_enviar, diretorio_nf_enviadas, diretorio_nf_retorno,diretorio_nf_retorno_cancelada, diretorio_nf_retorno_inutilizada, diretorio_nf_temp));

13 Respostas

Giulliano

a classe Thread não possue um construtor com tantos argumentos ?!?!??!

recoma

Primeiro de tudo, o que a classe EnviandoArquivos faz?

augustopovoa

Cara como tantos??
só estou passando 1

EnviandoArquivos
é a quem o metodo run

rodrigo_gomes

Olá,

Essa linha não fez nada além de criar a thread. Ela não executou o ‘run’ de sua classe ainda. Isso só irá ocorrer quando vc chamar thread.start(), aí sim sua thread vai estar em estado ‘runnable’ e assim que o SO tiver condições ela será executada.

[]´s

Giulliano

Cara como tantos??
só estou passando 1

EnviandoArquivos
é a quem o metodo run

Tá certo cara eu vi errado…a resposta certa foi dada acima…ela apenas cria uma instância da classe Thread e mais nada. Enquanto vc não chamar o método start() ou run() nada acontece com a Thread. Agora na classe que implementa o Runnable (EnviandoArquivo) pode ser que acontece alguma coisa aí vc precisa enviar o que ela faz…

michelantunes

Como o rodrigo_gomes explicou, você apenas criou a thread.
Certamente sua classe EnviandoArquivos implementa Runnable.
Agora só falta executar a thread.

Abs,

abelgomes

Thread.start :d

ViniGodoy

Ele cria um objeto capaz de disparar uma nova Thread e detectar o seu estado.

Esse objeto, não é uma thread nem antes e nem depois do start().
Esse é um dos erros de conceito mais comum entre os iniciantes em multi-threading. Uma thread não é uma classe, nem é um trecho de código. É uma linha de execução.

Duas threads, na verdade, podem percorrer o mesmo objeto, da mesma classe, ao mesmo tempo.

michelantunes

Mas quem disse que o objeto dele é uma thread?
Ele usa a classe Thread que, consequentemente, executa o objeto mencionado em uma thread no SO.

ViniGodoy

Quem será que disse?

Em todo caso, imaginei que vocês soubessem do que estavam falando. Mas eu gosto de ressaltar, em letras garrafais, e várias vezes, sempre que vejo o tópico.

Essa é a maior confusão vista aqui no GUJ. De longe. E é o que mais atrapalha no momento de entender o conceito. Por isso, antes que o pessoal comece a trocar as bolas, eu já falo, repito e ressalto 10.000 vezes o conceito correto.

O fato do Java ter chamado a classe de Thread ainda ajuda a confundir ainda mais.

E, para não perder o costume, vou repetir. :smiley:
No caso acima, não foi criada nenhuma thread. Ela não existe, não há preempção. Foi criado o objeto que irá disparar uma thread, no momento do start. Esse objeto, também não será a thread, embora seja capaz de conhecer informações da thread que criou.

A thread será, como o Michel mesmo falou, um recurso oferecido pelo SO. Uma nova linha de execução, um novo fluxo no seu programa.

rodrigo_gomes

Olá,

Na minha resposta acima, eu me referi a thread pensando no objeto/classe Thread, e não no fluxo de execução, sorry.

Muito legal sua explicação ViniGodoy!

[]´s

michelantunes

Beleza, apenas me expressei mal. O que quis dizer com “você apenas criou a thread” foi: criou o objeto da classe Thread, o qual cria um canal de comunicação para executar um processo(thread) no SO.

Pronto. Esclarecido?

augustopovoa

rodrigo_gomes:
Olá,

Essa linha não fez nada além de criar a thread. Ela não executou o ‘run’ de sua classe ainda. Isso só irá ocorrer quando vc chamar thread.start(), aí sim sua thread vai estar em estado ‘runnable’ e assim que o SO tiver condições ela será executada.

[]´s

DUVIDA ESCLARECIDA!
OBRIGADO A TODOS SEMPRE OTIMAS RESPOSTAS

ABRAÇO

Criado 3 de setembro de 2008
Ultima resposta 3 de set. de 2008
Respostas 13
Participantes 7