You are on page 1of 2

UNIVERSIDADE FEDERAL DE ALAGOAS

SISTEMAS OPERACIONAIS
ALUNO: DIOGO CABRAL DA SILVA
Exerccios 1 Thread em Java
Q1 A herana da classe Thread restringe uma thread em um nico objeto filho, no permitindo criar
classes filhas que sejam threads, porm, a interface Runnable que qualquer classe filha genrica
implemente sua prrpia Thread . vantajoso usar Runnable quando no se deseja implementar
muitas atividades, visto que o mtodo run() s pode ser iniciado uma vez, proveitoso iniciar
classes filhas de threads em implementaes Runnable aumentando a segmentao do programa.
Q2 public class Clock extends Applet implements Runnable {
private Thread clockThread = null;
public void start() {
if (clockThread == null) {
clockThread = new Thread(this, "Clock");
clockThread.start();
}
}
public void run() {
Thread myThread = Thread.currentThread();
while (clockThread == myThread) {
repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e){}
}
}
...
}
No exemplo acima, foi possvel implementar numa herana da classe Applet uma nova Thread,
visto que Java no suporta herana multipla, seria impossvel criar uma Thread Herdando de
Thread.
Q3 perguntado quantas Threads o usurio quer usar:
How many threads do you want to use (1 to 25) ?
Logo aps, a entrada validada e o programa segue (Supondo que a entrada foi 10):
Creating 10 primecounting threads...
Aps isto, cada thread exibe os nmeros primos de 2 at 1000000 causando uma baguna na tela

Q4 No possvel realizar esse tipo de teste pois o cdigo descrito est incompleto e no compila.
Porm, possvel deduzir que o tempo de execuo diretamente proporcional ao nmero de
Threads, pois a mesma atividade acaba sendo executada mais vezes.
Q5 No exemplo da questo 2 foi usado o mtodo sleep para pausar o loop While e apenas repintar o
relgio 1 segundo depois, observando que esse sleep() apenas interrompe a Thread em particular e
no a execuo completa do programa.
Q6 Pode acontecer que o valor acessado por uma Thread fique desatualizado, fazendo com que uma
Thread atualize o contador para um valor j existente, causando um erro de sincronismo.
Q7 Java possui um mecanismo de sincronizao de Threads para tratar erros de acesso concorrente.
No exemplo abaixo temos o seguinte objeto:
public class ContaCorrente {
float saldo = 0;
float tmp;
public float getSaldo(){
return saldo;
}
public void depositar(float valor){
tmp = getSaldo();
saldo = tmp+valor;
}
public void sacar(float valor){
tmp = getSaldo();
saldo = tmptmp - valor;
}
}
Se duas threads acessarem os mtodos depositar() e sacar() ao mesmo tempo, geraria inconsistncia
no resultado final das operaes (mesmo no causando erro). Para resolver isso, usa-se a palavra
reservada syncronized que bloqueia um mtodo para uma nica thread, nesse caso, seria adicionado
syncronized nos mtodos depositar e sacar, enfileirando a execuo dos mtodos pelas Threads
dessa forma:
public synchronized void depositar(float valor){
//
}
public synchronized void sacar(float valor){
//
}