exercícios sistemas operacionais
DESCRIPTION
Trabalho da disciplina de Sistemas OperacionaisTRANSCRIPT
-
UNIVERSIDADE FEDERAL DE ALAGOASSISTEMAS OPERACIONAISALUNO: 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 = tmp-tmp - 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 adicionadosyncronized 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){
// }