HTML Tutorials |
|
XML Tutorials |
|
Browser Scripting |
|
Server Scripting |
|
.NET (dotnet) |
|
Multimedia |
|
Web Building |
|
Java Tutorials |
|
Programming Langauges |
|
Soft Skills |
|
Database Tutorials |
|
Operating System |
|
Software Testing |
|
SAP Module |
|
Networking Programming |
|
Microsoft Office |
|
Accounting |
|
|
Threads of Control in Java |
Defini��o: Uma linha n�o � nada mas um �nico fluxo seq�encial do controle dentro do programa.
|
Que � linha?
|
Os programadores s�o familiares com os programas seq�enciais da escrita. O programa que indica �Hello o mundo! �, ou o programa que classifica uma lista dos nomes, ou computa a lista de n�meros principais, s�o seq�encial todos os programas: cada um tem o come�o, extremidade, seq��ncia, e em toda a hora dada durante o runtime do programa h� um �nico ponto da execu��o.
|
Uma linha � similar a um programa seq�encial, uma �nica linha tem tamb�m o come�o, extremidade, seq��ncia, e em toda a hora dada durante o runtime da linha haver� um �nico ponto da execu��o. Mas a linha pr�pria n�o � um programa que n�o pode funcionar por se mas por funcionamentos dentro do programa.
|
Exemplo simples da linha
|
O seguinte exemplo � uma aplica��o simples de Java que cr�e e comece duas linhas independentes.
|
class TwoThreadsTest
{
public static void main (String args[])
{
new SimpleThread("Japan").start();
new SimpleThread("India").start();
}
}
class SimpleThread extends Thread
{
public SimpleThread(String str)
{
super(str);
}
public void run()
{
for (int i = 0; i < 10; i++)
{
System.out.println(i + " " + getName());
try
{
sleep((int)(Math.random() * 1000));
} catch (InterruptedException e)
{}
}
System.out.println("DONE! " + getName());
}
}
|
|
O primeiro m�todo na classe de SimpleThread � um construtor que fa�a exame somente da corda como seu argumento. Este construtor � executado chamando os superclass construtor e � interessante porque ajusta o nome da linha que � usado mais tarde no programa.
|
O m�todo seguinte nesta classe � () m�todo funcionado. o m�todo do funcionamento () � o cora��o de toda a linha, esta � onde a a��o da linha ocorre. O m�todo do funcionamento () na classe de SimpleThread contem a para o la�o que itera dez vezes. Em cada uma da itera��o indica o n�mero da itera��o e o nome da linha e dorme ent�o para o intervalo aleat�rio de um tempo entre 0 e 1 segundo. Ap�s ter terminado o la�o, o m�todo do funcionamento () imprime �FEITO!� junto com o nome da linha.
|
Atributos de uma linha
|
Toda a a��o ocorre no corpo da linha, no m�todo do funcionamento da linha (). N�s podemos fornecer o corpo � linha em uma das duas maneiras: primeiramente subclassing uma classe da linha e cancelando o m�todo do funcionamento () da linha, secondly criando uma linha com o objeto Runnable como seu alvo.
|
Corpo de uma linha
|
As linhas de Java s�o executadas usando a classe da linha que � a parte do pacote de java.lang. Uma classe da linha executa a defini��o independente do sistema de linhas de Java. Mas, a execu��o real da opera��o simult�nea � fornecida pela execu��o sistema-espec�fica. Para a maioria das necessidades de programa��o, a execu��o subjacente n�o importa; n�s podemos ignorar a execu��o subjacente e programar a linha API e a outra documenta��o fornecida com o sistema de Java.
|
Estados de uma linha
|
Durante todo a vida, a linha de Java estar� em uma entre diversos estados. O estado de uma linha indica o que a linha est� fazendo atualmente e o que pode fazer naquele tempo de sua vida: se ele est� funcionando? est� dormindo? ou est� inoperante? Estes estados s�o ilustrados abaixo.
|
Linha nova
The statement below creates a new thread but it will not start it thereby leaving
the thread in a state labeled "New Thread".
|
Thread myThread = new MyThreadClass();
|
|
Quando a linha est� �no estado da linha nova�, meramente � um objeto vazio da linha. Nenhum recurso de sistema � alocado para ele ainda. Assim quando a linha est� neste estado, n�s podemos somente come�ar ou parar a linha; quando uma linha est� neste estado que chama algum do outro m�todo al�m do come�o () ou o batente () n�o far� nenhum sentido e n�o causa um IllegalThreadStateException.
|
Runnable
O m�todo do come�o () cr�a todos os recursos de sistema necess�rios para funcionar uma linha, programa a linha para funcionar, e o m�todo do funcionamento da linha das chamadas ().
|
Thread myThread = new MyThreadClass();
myThread.start();
|
|
Neste momento a linha est� no estado �Runnable�. Este estado � chamado estado �Runnable� melhor que estado �funcionando� porque a linha n�o pode funcionar realmente quando est� neste estado. Muitos computadores t�m um �nico processador faz�-lo imposs�vel funcionar ao mesmo tempo todas as linhas �Runnable�. Conseq�entemente o sistema runtime de Java deve executar o esquema programando que compartilha do processador entre todas as linhas �Runnable�. Para a maioria das finalidades entretanto, n�s podemos pensar do estado �Runnable� como simplesmente �funcionando�. Quando uma linha est� funcionando, � �Runnable� e � a linha atual. As instru��es no m�todo do funcionamento () est�o executando sequencialmente.
|
Nao runnable Uma linha participa no estado �nao runnable� quando um de seguintes eventos ocorre:
- Quando um m�todo suspender () for chamado
- Quando um m�todo do sono () for chamado
- Quando a linha usar seu m�todo da espera () esperar uma vari�vel da circunst�ncia
- Quando a linha obstruir no I/o.
|
Thread myThread = new MyThreadClass();
myThread.start();
try
{
myThread.sleep(10000);
} catch (InterruptedException e)
{
}
|
|
A linha bold(realce) no exemplo acima p�e o myThread para dormir por 10 segundos. Durante estes 10 segundos, mesmo se o processador se tornar dispon�vel o myThread n�o funcionar�. Ap�s 10 segundos sobre, o myThread torna-se �Runnable� outra vez e se o processador estivesse dispon�vel funcionaria.
|
Seguir indica��es indica a rota de escape para cada entrada no estado �nao runnable�.
- Se a linha for posta para dormir, ent�o o tempo especificado deve decorrer.
- Se a linha for suspendida, ent�o algu�m deve chamar o m�todo do resumo ().
- Se a linha estiver esperando na vari�vel da circunst�ncia, o que objeto possui a vari�vel deve abandonar esta chamando notifica () ou m�todo do notifyAll ().
- Se a linha for obstru�da no I/O, a seguir o comando especificado do I/O deve come�ar completo.
|
Inoperante
Uma linha pode morrer em duas maneiras diferentes: qualquer um por uma causa natural, ou sendo matado (parado). Uma linha est� dita morrer naturalmente quando o m�todo do funcionamento () retira normalmente. Cosider por exemplo, o la�o do quando no m�todo do funcionamento for um la�o finito, iterar� 100 vezes e para-as de ent�o executar.
|
public void run()
{
int i = 0;
while (i < 100)
{
i++;
System.out.println("i = " + i);
}
}
|
|
N�s podemos tamb�m matar uma linha em qualquer altura que simplesmente chamando o m�todo do batente (). Isto � como mostrado no c�digo abaixo:
|
public void run()
{
Thread myThread = new MyThreadClass();
myThread.start();
try
{
Thread.currentThread().sleep(10000);
} catch (InterruptedException e)
{
}
myThread.stop();
}
|
|
O m�todo do funcionamento aqui cr�a e myThread dos come�os ent�o p�e a linha atual para dormir por uns 10 segundos. Quando a linha atual acorda, a linha bold(realce) no segmento de c�digo matar� o myThread.
|
O m�todo do batente () jogar� um objeto de ThreadDeath para matar a linha. Quando a linha � matada desse modo morre asynchronously. A linha morrer� quando recebe realmente uma exce��o de ThreadDeath.
|
IllegalThreadStateException o sistema runtime joga um IllegalThreadStateException quando n�s chamamos um m�todo em uma linha e o estado da linha n�o permitir� essa chamada do m�todo. Por exemplo, IllegalThreadStateException est� jogado quando n�s chamamos um m�todo suspender () em uma linha que n�o seja �Runnable�.
|
Como por nos exemplos das linhas estudadas assim distante neste cap�tulo, quando n�s chamamos um m�todo da linha que possa jogar uma exce��o, voc� deve travar e segurar a exce��o, ou deve declarar isso, a exce��o de chamada do uncaught dos throws do m�todo.
|
public void run()
{
Thread myThread = new MyThreadClass();
myThread.start();
try
{
Thread.currentThread().sleep(10000);
} catch (InterruptedException e)
{
}
myThread.stop();
}
|
|
() m�todo isAlive
|
Se o m�todo que () os retornos isAlive verdadeiros enf�am ent�o for come�ado e n�o parado. Assim, se () o m�todo isAlive retornar falso n�s sabemos que a linha � qualquer uma �linha nova� ou a �inoperante�. Se () o m�todo isAlive retornar verdadeiro, voc� ent�o a linha � �Runnable� ou �nao runnable�.
|
|
Prioridade da linha
|
Quando uma linha de Java � criada, herda a prioridade da linha que a criou. N�s podemos tamb�m modificar a prioridade da linha em qualquer altura que ap�s sua cria��o usando o setPriority do m�todo (). As prioridades das linhas variam de MIN_PRIORITY a MAX_PRIORITY (estas s�o as constantes definidas na linha da classe). Em todo o instante dado do tempo, quando as linhas m�ltiplas est�o prontas para executar, o sistema runtime escolhe a linha �Runnable� que tem a prioridade a mais elevada para a execu��o. Somente quando esta linha para, rende, ou torna-se �nao runnable� para alguma sorte da raz�o, executar mais baixo do come�o da linha da prioridade. Se houver duas linhas que t�m o mesmo processador central de espera da prioridade, o scheduler escolh�-los-� em uma forma do redondo-robin.
|
Linhas do Daemon
|
Toda a linha de Java pode ser linha do daemon. As linhas do Daemon s�o fornecedores de servi�o para aqueles linhas ou objetos que funcionam em mesmo processo que a linha do daemon est� funcionando. Por exemplo, o browser de HotJava tem uma linha do daemon, chamada o leitor da imagem de fundo, que l� imagens do sistema de lima ou rede para alguma do objeto ou da linha que necessita uma imagem.
|
Keywords: multiple threads, java threads lock, scott oaks, henry wong
|
|
HTML Quizes |
|
XML Quizes |
|
Browser Scripting Quizes |
|
Server Scripting Quizes |
|
.NET (dotnet) Quizes |
|
Multimedia Quizes |
|
Web Building Quizes |
|
Java Quizes |
|
Programming Langauges Quizes |
|
Soft Skills Quizes |
|
Database Quizes |
|
Operating System Quizes |
|
Software Testing Quizes |
|
SAP Module Quizes |
|
Networking Programming Quizes |
|
Microsoft Office Quizes |
|
Accounting Quizes |
|
|