Professional Documents
Culture Documents
Aplicações Distribuídas
Licenciatura em Engenharia Informática
3º Ano – 5º Semestre
Ano lectivo 2010-2011
Pipes em Java
Introdução aos Threads em Java
Comunicação entre Tarefas (Threads).
Classes Java de Suporte
Passagem de arrays de bytes
Passagem de fluxos (Streams) de dados
Passagem de Objectos
class ABC
{
….
public void main(..)
{
System.out.println(" Este thread
está em execução... "); Thread
}
}
thr1.start();
class ThreadEx2 {
public static void main(String [] args ) {
Thread t = new Thread(new MyThread());
// Devido à implementação da interface Runnable
// Chamo o método start(), que chamará o método run
().
t.start();
} // fim do main()
} // fim da classe ThreadEx2
novo
wait()
start() sleep()
suspend(),
…
runnable non-runnable
notify()
stop()
resume(),
…
dead
Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011
12
Controlo das Java Threads
Métodos fornecidos pela classe Thread:
start() e stop(): arrancam e terminam a execução da
thread
suspend() e resume(): suspende e retoma a
execução da thread
sleep(delay): adormece a thread durante alguns
milisegundos
class ThreadTest
{
public static void main(String args[])
{
new A().start();
new B().start();
new C().start();
}
}
PC client
Internet Bank
Server
Local Area Network
Bank
Database PDA
Alexandre Fonte Material de Apoio a AD, ESTCB Edição 2010-2011
19
Acesso a Recursos partilhados
Se uma thread tenta ler dados, enquanto outra tenta
actualizar os dados, pode conduzir a um estado
inconsistência dos dados.
Solução: Previne-se simplesmente sincronizando o acesso
aos dados.
Uso métodos Synchronized :
public synchronized void update()
{
…
}
Pedaços Synchronized :
void updated()
{
synchronized (this) {
//Pedaço synchronized
}
}
class InternetBankingSystem {
public static void main(String [] args ) {
Account accountObject = new Account ();
Thread t1 = new Thread(new MyThread(accountObject));
Thread t2 = new Thread(new YourThread(accountObject));
Thread t3 = new Thread(new HerThread(accountObject));
t1.start();
t2.start();
t3.start();
// DO some other operation
} // end main()
}
Espaço de
endereçamento Espaço de
Privado endereçamento
Privado
Pipe
Thread 1 Thread 2
PipedOutputStream
DataOutputStream
Passagem de Objectos
ObjectInputStream
ObjectOutputStream
in = new java.io.DataInputStream(is);
out = new java.io.DataOutputStream(os);
in = new java.io.ObjectInputStream(is);
out = new java.io.ObjectOutputStream(os);