Você está na página 1de 2

Lista de Exerccios - Threads 1 - Crie um programa que cria 10 threads cada uma escreve uma mensagem na tela contendo

seu nome. 2 - Escreva um programa que realize o clculo das somas dos valores das linhas de uma matriz, de ordem 4, de nmeros inteiros e imprima o resultado na tela. Faa com que o clculo do somatrio de cada linha seja realizado em paralelo por threads. 3 - Defina a classe Contador como uma implementao da interface Runnable, que imprime nmeros de 0 a 100. 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. 4 - 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. 5 - 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. 6 - 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. 7 - 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). 8 - 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. 9 - 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.