JavaRush /Blogue Java /Random-PT /Nível 28. Respostas às perguntas da entrevista sobre o tó...
zor07
Nível 31
Санкт-Петербург

Nível 28. Respostas às perguntas da entrevista sobre o tópico do nível

Publicado no grupo Random-PT
Olá a todos! Decidi continuar meus estudos em Javarash, apesar de já ter conseguido um emprego em Java. Nível 28. Respostas às perguntas da entrevista sobre o tema do nível - 1Escrevo este blog para mim mesmo, com muita preguiça e, pode-se dizer, sob pressão. Ficarei muito feliz se alguém achar útil, mas você não deve usá-lo como principal fonte para encontrar respostas para questões de nível.

1. Quais são as prioridades do thread?

Cada thread no sistema tem sua própria prioridade. Prioridade é algum número no objeto thread de 1 a 10, com um valor mais alto indicando prioridade mais alta. O sistema executa primeiro os threads de prioridade mais alta, e os threads de prioridade mais baixa recebem tempo de CPU somente quando suas contrapartes mais privilegiadas estão ociosas. Você pode trabalhar com prioridades de thread usando duas funções:
void setPriority(int priority) //устанавливает приоритет потока.
Os possíveis valores de prioridade são MIN_PRIORITY, NORM_PRIORITY e MAX_PRIORITY.
int getPriority() // получает приоритет потока.
Origem Se a prioridade não for especificada, o encadeamento receberá prioridade 5 - média. A prioridade do thread não afeta muito sua operação, mas é de natureza consultiva. Se houver vários threads suspensos que precisam ser iniciados, a máquina Java iniciará primeiro o thread com a prioridade mais alta. A máquina Java gerencia os threads como achar melhor. Threads de baixa prioridade não ficarão ociosos. Eles simplesmente receberão menos tempo que outros, mas ainda assim serão executados. Na maioria dos casos, os threads sempre são executados com a mesma prioridade. Tentar dar mais tempo a um thread do que outros geralmente indica um erro de arquitetura no programa.

2. É possível interromper um thread reduzindo sua prioridade para 0?

Não. Será jogadoIllegalArgumentException

3. Por que a classe ThreadGroup é necessária?

Para evitar que qualquer thread pare e interrompa todos os threads consecutivos, foi introduzido o conceito de “grupo de threads”. Um thread só pode afetar outros threads contidos no mesmo grupo que ele. ThreadGroupé uma classe que gerencia grupos de threads. Essa abordagem permite proteger threads contra alterações indesejadas. Às vezes você precisa executar um código no qual não pode confiar 100%. Portanto, é conveniente colocar todos os seus threads em um grupo separado e evitar que interfiram no trabalho do grupo principal de threads. Em outras palavras, para gerenciar grupos de threads

4. A qual grupo de threads pertence o thread principal?

main

5. Qual é o padrão ThreadPool

Em termos gerais, um padrão ThreadPoolé um grupo de threads que resolvem grupos de problemas. As tarefas são organizadas em uma fila. Depois que um thread termina de trabalhar em uma tarefa, ele solicita a próxima tarefa da fila até que todas as tarefas da fila sejam concluídas. Depois disso, o thread pode terminar ou dormir até que novas tarefas apareçam na fila.

6. Por que precisamos da classe ThreadPoolExecutor?

Para resolver um grande número de pequenos problemas com um grupo de threads. Usar uma classe evita o desperdício de recursos da máquina. Porque criar seu próprio tópico para cada tarefa não é muito racional. A máquina Java aloca muitos recursos para cada thread. Em outras palavras, criar e destruir um thread gasto pode desperdiçar mais recursos e tempo do que a tarefa em si. Os desenvolvedores Java criaram uma solução elegante para esse problema - ThreadPoolExecutor. Esta é uma classe que tem duas coisas dentro:
  • Uma fila de tarefas à qual você pode adicionar tarefas conforme aparecem no programa.
  • Pool de threads (grupo de threads) – que executam essas tarefas.
Nesse caso, os threads não são destruídos após a conclusão da tarefa, mas adormecem. Para começar a completar uma nova tarefa assim que ela aparecer.

7. Quantas maneiras de criar um tópico você conhece? (Thread, Executável, Chamável )

public class ThreadsTests {
    //Способ 1
    static class ThreadExampleRunnable implements Runnable{
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName());
        }
    }

    //Способ 2
    static class ThreadExampleFromThread extends Thread {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName());
        }
    }

    //Способ 3
    static class ThreadExampleFromCallable implements Callable{
        @Override
        public String call() throws Exception {
            return Thread.currentThread().getName();
        }
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        new Thread(new ThreadExampleRunnable()).start(); //Способ 1
        new ThreadExampleFromThread().start(); //Способ 2

        //Способ 3
        ExecutorService service = Executors.newFixedThreadPool(5);
        Future task = service.submit(new ThreadExampleFromCallable());
        System.out.println(task.get());

    }
}

8. Para que serve a classe Future?

Este objeto pode ser utilizado para saber se uma tarefa já foi concluída e também para obter o resultado de sua execução. boolean cancel(boolean mayInterrupt); // Останавливает задачу.
boolean isCancelled(); //returns true, если задача была остановлена.
boolean isDone(); //returns true, если выполнение задачи завершено.
V get() throws InterruptedException, ExecutionException; //returns результат вызова метода call or кидает исключение, если оно было.

9. Quais são as vantagens do Callable em relação ao Runnable?

Usando Callablepodemos descobrir se a tarefa foi concluída e descobrir seu resultado é muito mais fácil do que usarRunnable

10. É possível cancelar a execução de uma tarefa se utilizarmos a classe Future?

É possível se a tarefa estiver na fila e aguardando execução, caso contrário não é fato
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION