Quanto aos escalonamentos de threads em Java, considere: I. ...
I. Em sistemas que aceitam preempção, uma thread executando em uma CPU também pode ser interrompida por uma thread de prioridade mais alta.
II. Chamando o método run(), uma thread sugere que deseja abrir mão do controle da CPU, permitindo que outra thread tenha a oportunidade de ser executada.
III. Para que todas as threads tenham uma quantidade igual de tempo de CPU em um sistema que não realiza a repartição de tempo, uma thread pode abandonar o controle da CPU com o método yield().
Está correto o que se afirma em
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: D - I e III, apenas.
A questão aborda o conceito de escalonamento de threads na linguagem de programação Java. Vamos analisar as afirmações para entender o porquê da alternativa D ser a correta:
I. Em sistemas que aceitam preempção, uma thread executando em uma CPU também pode ser interrompida por uma thread de prioridade mais alta.
Esta afirmação é verdadeira. Em sistemas operacionais que suportam preempção, o escalonador pode interromper uma thread que está executando para dar lugar a outra thread de maior prioridade. Isso é feito para garantir que as tarefas mais importantes (threads com maior prioridade) possam ser atendidas mais rapidamente.
II. Chamando o método run(), uma thread sugere que deseja abrir mão do controle da CPU, permitindo que outra thread tenha a oportunidade de ser executada.
Esta afirmação é falsa. O método run()
é o ponto de entrada da thread, onde o código que será executado pela thread é definido. Chamá-lo diretamente não faz a thread atual ceder o controle da CPU; ele simplesmente executa o código do método como uma chamada de função comum, dentro da thread atual.
III. Para que todas as threads tenham uma quantidade igual de tempo de CPU em um sistema que não realiza a repartição de tempo, uma thread pode abandonar o controle da CPU com o método yield().
Esta afirmação é verdadeira. O método yield()
é uma sugestão ao escalonador de que a thread atual está disposta a ceder o uso da CPU para outras threads de mesma prioridade. No entanto, a decisão final é do escalonador do sistema operacional, que pode ou não atender a sugestão.
Com isso, as afirmações I e III estão corretas, o que nos leva à alternativa D como sendo a correta. O entendimento do escalonamento de threads é fundamental para a programação concorrente, e saber como os métodos run()
e yield()
funcionam permite escrever códigos que fazem uso eficiente dos recursos de processamento.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
A assertiva II está seria correta se substituída por:
Chamando o método yield(), uma thread sugere que deseja abrir mão do controle da CPU, permitindo que outra thread tenha a oportunidade de ser executada.
Para quem não tem acesso a alternativa correta é a:
1 e 3 apenas!!!
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo