Buscar

Java Avançado 7provaRec

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

Java Avançado
Avaliação
Parte superior do formulário
1) O que é correto afirmar sobre as tarefas futuras suportadas pelo pacote java.util.concurrent?
* Marque todas as alternativas que respondem o enunciado da questão
	
	O uso de tarefas futuras possibilita que um código inicie uma tarefa em uma thread separada e, algum tempo depois, leia o resultado retornado por esta thread. (alternativa correta)
	
	Uma tarefa futura é uma tarefa que, depois de iniciada, demora um certo tempo até efetivamente começar a executar. (alternativa incorreta)
	
	A classe FutureTask é usada para representar uma tarefa futura. (alternativa correta)
	
	Uma tarefa futura é uma tarefa que é executada de forma assíncrona e que retorna um resultado futuro, assim que termina. (alternativa correta)
	
	O método get(), usado para ler o resultado retornado por uma tarefa futura, retorna null caso a tarefa ainda não tenha terminado. (alternativa incorreta)
	
	Resposta incorreta!
Uma tarefa futura é uma tarefa assíncrona executada por uma thread distinta que pode retornar um resultado no futuro. A classe FutureTask representa uma tarefa futura. O método get(), ao ser chamado, bloqueia caso a thread ainda não tenha terminado de executar a tarefa.
2) O que é correto afirmar sobre um ReentrantReadWriteLock?
* Marque todas as alternativas que respondem o enunciado da questão
	
	Possui um par de locks: um para leitura e um para escrita. (alternativa correta)
	
	Apenas uma thread pode obter o lock de escrita por vez. (alternativa correta)
	
	Possui apenas um lock para leitura e escrita. (alternativa incorreta)
	
	Apenas uma thread pode obter o lock de leitura por vez. (alternativa incorreta)
	
	Garante que, quando uma thread obtém o lock de escrita, nenhuma outra thread detém um lock de leitura ou outro de escrita. (alternativa correta)
	
	Resposta correta!
O ReentrantReadWriteLock é composto por um par de locks, sendo um para leitura e outro para escrita. Ele permite que diversas threads obtenham o lock de leitura ao mesmo tempo, já que ler dados concorrentemente não prejudica a consistência. No momento em que uma thread obtém o lock de escrita, existe a garantia de que ela está executando a região crítica de forma exclusiva (não existem outras threads lendo ou escrevendo simultaneamente).
3) O que é possível afirmar sobre a chamada task.join()? Considere que a variável task referencia um objeto da classe RecursiveTask.
* Marque todas as alternativas que respondem o enunciado da questão
	
	Inicia a execução da tarefa task de forma paralela, através da chamada ao método compute() no objeto. (alternativa incorreta)
	
	Faz com que a tarefa task seja executada de forma paralela. (alternativa incorreta)
	
	Cria uma thread no pool de threads ForkJoinPool. (alternativa incorreta)
	
	É uma operação bloqueante, isto é, congela a execução do código até que a tarefa task seja finalizada e retorne um resultado. (alternativa correta)
	
	Uma chamada ao método task.fork() deve ocorrer antes que task.join() seja chamado. (alternativa correta)
	
	Resposta incorreta!
O método join(), ao ser chamado, fica bloqueado até que a tarefa termine. Ele deve ser chamado após o método fork(), que é responsável por agendar a tarefa para ser executada paralelamente.
4) Qual interface do pacote java.util.concurrent possui o método call() que deve ser implementado pelas classes que implementam esta interface?
	
	ReentrantLock (alternativa incorreta)
	
	ExecutorService (alternativa incorreta)
	
	Executable (alternativa incorreta)
	
	Runnable (alternativa incorreta)
	
	Callable (alternativa correta)
	
	Resposta correta!
A interface Callable possui o método call(). Ela é semelhante à interface Runnable, com a diferença de que permite que o método retorne alguma informação e possibilita o lançamento de checked exceptions.
Java Avançado
Avaliação
Parte superior do formulário
1) O que é correto afirmar sobre as tarefas futuras suportadas pelo pacote java.util.concurrent?
* Marque todas as alternativas que respondem o enunciado da questão
	
	O uso de tarefas futuras possibilita que um código inicie uma tarefa em uma thread separada e, algum tempo depois, leia o resultado retornado por esta thread. (alternativa correta)
	
	Uma tarefa futura é uma tarefa que, depois de iniciada, demora um certo tempo até efetivamente começar a executar. (alternativa incorreta)
	
	Uma tarefa futura é uma tarefa que é executada de forma assíncrona e que retorna um resultado futuro, assim que termina. (alternativa correta)
	
	A classe FutureTask é usada para representar uma tarefa futura. (alternativa correta)
	
	O método get(), usado para ler o resultado retornado por uma tarefa futura, retorna null caso a tarefa ainda não tenha terminado. (alternativa incorreta)
	
	Resposta correta!
Uma tarefa futura é uma tarefa assíncrona executada por uma thread distinta que pode retornar um resultado no futuro. A classe FutureTask representa uma tarefa futura. O método get(), ao ser chamado, bloqueia caso a thread ainda não tenha terminado de executar a tarefa.
2) O que é correto afirmar sobre um ReentrantReadWriteLock?
* Marque todas as alternativas que respondem o enunciado da questão
	
	Apenas uma thread pode obter o lock de leitura por vez. (alternativa incorreta)
	
	Apenas uma thread pode obter o lock de escrita por vez. (alternativa correta)
	
	Possui apenas um lock para leitura e escrita. (alternativa incorreta)
	
	Garante que, quando uma thread obtém o lock de escrita, nenhuma outra thread detém um lock de leitura ou outro de escrita. (alternativa correta)
	
	Possui um par de locks: um para leitura e um para escrita. (alternativa correta)
	
	Resposta incorreta!
O ReentrantReadWriteLock é composto por um par de locks, sendo um para leitura e outro para escrita. Ele permite que diversas threads obtenham o lock de leitura ao mesmo tempo, já que ler dados concorrentemente não prejudica a consistência. No momento em que uma thread obtém o lock de escrita, existe a garantia de que ela está executando a região crítica de forma exclusiva (não existem outras threads lendo ou escrevendo simultaneamente).
3) Quais são as formas mais usuais de criar uma tarefa (task) na Fork & Join API?
* Marque todas as alternativas que respondem o enunciado da questão
	
	Criar uma classe que estenda de RecursiveTask. (alternativa correta)
	
	Criar uma classe que estenda de RecursiveAction. (alternativa correta)
	
	Criar uma classe que estenda de ForkTask. (alternativa incorreta)
	
	Criar um objeto da classe ForkJoinTask. (alternativa incorreta)
	
	Criar um objeto da classe RecursiveTask. (alternativa incorreta)
	
	Resposta incorreta!
As duas formas comumente utilizadas são a criação de uma classe que estenda de RecursiveAction (não retorna nenhum resultado) ou de RecursiveTask (retorna um resultado). Criar objetos das classes ForkJoinTask ou RecursiveTask não é possível, pois estas classes são abstratas. A classe ForkTask não existe na API.
4) O que é correto afirmar sobre o código abaixo?
* Marque todas as alternativas que respondem o enunciado da questão
	1
	ExecutorService e = Executors.newSingleThreadExecutor();
	2
	e.execute(new Task());
	3
	e.execute(new Task());
	4
	e.execute(new Task());
	5
	e.shutdown();
	
	Ao iniciar três novas threads, elas serão executadas em sequência e não simultaneamente. (alternativa correta)
	
	Para que a chamada execute() funcione, a classe Task deve implementar a interface Runnable. (alternativa correta)
	
	Enquanto o método shutdown() não for chamado, existe uma thread que vai ficar sempre ativa aguardando tarefas para realizar. (alternativa correta)
	
	Este código dispara outras threads, que executarão de forma simultânea, teoricamente. (alternativa incorreta)
	
	A chamada Executors.newSingleThreadExecutor()cria um pool com diversas threads, que ficam prontas para atender a requisições. (alternativa incorreta)
	
	Resposta incorreta!
A chamada Executors.newSingleThreadExecutor() cria apenas uma thread para atender requisições. Por este motivo, as três threads disparadas pelo código irão executar em sequência (existe apenas uma thread para realizar o trabalho, logo ela tem que fazer uma tarefa de cada vez). O método execute() sempre recebe uma instância de Runnable. O método shutdown() é utilizado para terminar a(s) thread(s) associadas ao ExecutorService. Enquanto ele não for chamado, as threads continuam aguardando requisições.
Recuperei:
Java Avançado
Avaliação
Parte superior do formulário
1) Através da utilização dos locks, o uso do modificador synchronized torna-se desnecessário. Esta afirmação é verdadeira ou falsa?
	
	Falsa (alternativa incorreta)
	
	Verdadeira (alternativa correta)
	
	Resposta incorreta!
A afirmação é verdadeira, uma vez que os locks do pacote java.util.concurrent.locks fazem o mesmo papel do modificador synchronized, que é sincronizar o acesso das threads a uma região crítica.
2) Qual a característica principal das classes do pacote java.util.concurrent.atomic, que possibilitam a realização de operações atômicas?
	
	Necessitam apenas do uso de locks de leitura (os de escrita não são necessários). (alternativa incorreta)
	
	Necessitam apenas do uso de locks de escrita (os de leitura não são necessários). (alternativa incorreta)
	
	Permitem a manipulação de dados sem que seja necessário o uso de mecanismos de sincronização de threads. (alternativa correta)
	
	Encapsulam dados, com o objetivo de tornar mais fácil o seu acesso. (alternativa incorreta)
	
	Resposta correta!
A característica principal destas classes é a capacidade que elas têm de manipular dados de forma atômica sem precisar de qualquer tipo de lock.
3) O que é correto afirmar sobre as tarefas futuras suportadas pelo pacote java.util.concurrent?
* Marque todas as alternativas que respondem o enunciado da questão
	
	O uso de tarefas futuras possibilita que um código inicie uma tarefa em uma thread separada e, algum tempo depois, leia o resultado retornado por esta thread. (alternativa correta)
	
	A classe FutureTask é usada para representar uma tarefa futura. (alternativa correta)
	
	Uma tarefa futura é uma tarefa que é executada de forma assíncrona e que retorna um resultado futuro, assim que termina. (alternativa correta)
	
	O método get(), usado para ler o resultado retornado por uma tarefa futura, retorna null caso a tarefa ainda não tenha terminado. (alternativa incorreta)
	
	Uma tarefa futura é uma tarefa que, depois de iniciada, demora um certo tempo até efetivamente começar a executar. (alternativa incorreta)
	
	Resposta correta!
Uma tarefa futura é uma tarefa assíncrona executada por uma thread distinta que pode retornar um resultado no futuro. A classe FutureTask representa uma tarefa futura. O método get(), ao ser chamado, bloqueia caso a thread ainda não tenha terminado de executar a tarefa.
4) O que é correto afirmar sobre um ReentrantReadWriteLock?
* Marque todas as alternativas que respondem o enunciado da questão
	
	Apenas uma thread pode obter o lock de leitura por vez. (alternativa incorreta)
	
	Possui apenas um lock para leitura e escrita. (alternativa incorreta)
	
	Garante que, quando uma thread obtém o lock de escrita, nenhuma outra thread detém um lock de leitura ou outro de escrita. (alternativa correta)
	
	Apenas uma thread pode obter o lock de escrita por vez. (alternativa correta)
	
	Possui um par de locks: um para leitura e um para escrita. (alternativa correta)
	
	Resposta correta!
O ReentrantReadWriteLock é composto por um par de locks, sendo um para leitura e outro para escrita. Ele permite que diversas threads obtenham o lock de leitura ao mesmo tempo, já que ler dados concorrentemente não prejudica a consistência. No momento em que uma thread obtém o lock de escrita, existe a garantia de que ela está executando a região crítica de forma exclusiva (não existem outras threads lendo ou escrevendo simultaneamente).
Parte inferior do formulário
Parte inferior do formulário
Parte inferior do formulário

Outros materiais