You are on page 1of 3

Threads Crie um programa que cria 10 threads cada uma escreve uma mensagem na tela contendo seu nmero.

Escreva um programa que realize o clculo das somas dos valores das linhas de uma matriz qualquer de nmeros inteiros e imprima o resultado na tela. Faa com que o clculo do somatrio de cada linha seja realizado em paralelo por uma thread. Defina a classe Contador como uma implementao da interface Runnable, que imprime nmeros de 0 a 1000. Crie a classe TesteContador que deve definir o mtodo main que cria e inicia a execuo do thread Contador. Teste o resultado executando a classe TesteContador. Agora altere o mtodo main da classe TesteContador para criar dois ou mais threads Contador e inicialize a execuo dos mesmos. Crie uma classe T1 do tipo Thread com um mtodo construtor que receba um nmero de identificao da Thread e um mtodo run que fique em loop eterno imprimindo na tela a frase "Thread x executando", onde x o nmero de identificao da Thread. Faa um programa que crie uma matriz de 5 Threads T1 e, com um lao FOR, inicialize todas as Threads. Crie duas threads onde uma fica enviando notcias a cada 5 segundos (textos quaisquer, no total de 10), enquanto a outra fica enviando a hora a cada 10 segundos. A hora dever ser informada umas 5 vezes para que o programa se encerre. Crie um programa que cria 3 threads.A primeira escreve na tela A, a segunda B e a terceira C. Faa que seja sempre escrito na tela ABC. Escreva um programa em que duas threads escrevam nmeros aleatrios em um vetor global de inteiros e de tamanho 100. Estas threads devem usar mutexes para obter o valor que indica a posio a ser preenchida no vetor. Este valor comea em -1 e cada thread deve increment-lo antes de us-lo. Quando o vetor estiver preenchido a thread original deve ser acordada por meio de uma varivel de condio. Defina uma classe Mailbox que tem um atributo message do tipo String. A classe Mailbox deve ter dois mtodos: storeMessage e retrieveMessage. O mtodo storeMessage recebe um String e, se o mesmo tiver sido consumido (message == null), armazena no atributo message do Mailbox. Caso contrrio, quem chamou o mtodo storeMessage deve esperar at que algum consuma a mensagem (chamando o mtodo retrieveMessage). De forma similar, o mtodo retrieveMessage retorna o valor da mensagem, caso ela tenha sido produzida/armazenada (message != null). Caso contrrio quem chamou o mtodo deve esperar at que algum produza uma mensagem (chamando o mtodo storeMessage). Crie a classe Producer, que um thread e deve ter um atributo do tipo Mailbox e no seu mtodo run deve ser definido um loop que executa o mtodo storeMessage do Mailbox, armazenando mensagens no Mailbox. Defina um a classe Consumer, que tambm um thread, e que deve consumir mensagens (chamando o mtodo retrieveMessage) escritas em no seu atributo do tipo Mailbox.

Crie uma classe de teste com um mtodo main que cria um Producer e um Consumer que compartilham o mesmo Mailbox e iniciam a execuo. Altere a classe de teste para criar mais de um produtor e/ou consumidor para o mesmo Mailbox. Dicas: Utilize os mtodos wait e notifiAll para implementar os mtodos da classe Mailbox. Na ltima parte do exerccio, onde pedido para alterar a classe de teste, voc deve adicionar um atributo de identificao (String) nas classes

Producer e Consumer, de modo a permitir que sejam identificados tanto que est consumindo uma mensagem, quanto que esta produzindo a mesma. Para tal concatene o identificador dos objetos a mensagem a ser enviada (no caso do produtor) ou a mensagem a ser impressa (no caso do consumidor). O programa ExThreadsABC.java ilustra o uso de threads em Java. Esse programa no controla o acesso concorrente aos dados compartilhados. Para verificar o que pode dar errado, compile esse programa e execute-o diversas vezes, comparando os resultados das diferentes execues. Corrija o programa do exerccio anterior, usando um mtodo synchronized. Escreva uma classe que permita paralelizar uma pesquisa em um array de inteiros. Isso deve ser feito com o seguinte mtodo: public static int parallelSearch(int x, int[] A, int numThreads). Este mtodo cria tantas threads quanto especificadas em numThreads, divide o array A em muitas partes e d a cada thread parte do array para procurar sequencialmente pelo valor x. Se uma thread encontrar o valor x, ento retornado o ndice i (A[i]=x), ao contrrio -1. Analise a classe SimplePingPong.java, que ilustra o uso dos mtodos wait() e notifyAll(). Obtenha a classe FlightSimulator.java. Este programa possui 2 threads que simulam um avio e um aeroporto. O avio deve sincronizar-se com o aeroporto para verificar se h pista livre para decolagem ou aterrissagem. Para isso, voc deve implementar o mtodo waitAvailableRunway() da classe Airport. O programa FlightSimulator.java tem uma thread que executa indefinidamente (aeroporto). Altere o programa para que esta thread termine depois que o avio aterrissar (use alguma forma de interao entre threads). O programa FlightSimulator.java usa uma forma alternativa de especificar o trabalho que ser executado pelas threads: herana da interface Runnable. Reescreva o programa usando herana da classe Thread, como no programa SimplePingPong.java. Cinco lebres disputaro uma corrida. Cada lebre pode dar um salto que varia de 1 a 3 metros de distncia. A distancia percorrida de 20 metros. Na corrida, cada lebre dar um salto,

informar quantos metros ela pulou a cada salto realizado. Em seguida, a lebre pra para descansar (yield()). Escreva um programa, utilizando threads (uma para cada lebre), que informe a lebre vencedora e a colocao de cada uma delas no final da corrida. Informar tambm quantos pulos cada uma delas deu.