JavaRush /Java Blog /Random-KO /레벨 28. 레벨 주제에 대한 인터뷰 질문에 대한 답변
DefNeo
레벨 36

레벨 28. 레벨 주제에 대한 인터뷰 질문에 대한 답변

Random-KO 그룹에 게시되었습니다
레벨 28. 레벨-1 주제에 관한 인터뷰 질문에 대한 답변
  1. 스레드 우선순위는 무엇입니까?

    이 질문에 대한 답은 JavaRush 강의에 있습니다.

    Java에서 스레드의 병렬 작업을 최적화하기 위해 스레드 우선 순위를 설정할 수 있습니다. 우선순위가 높은 스레드는 우선순위가 낮은 스레드보다 CPU 시간을 받는 데 이점이 있습니다.

    우선순위 작업은 다음 클래스 메소드를 통해 제공됩니다 Thread.

    public final void setPriority(int newPriority)

    스레드 우선순위를 설정합니다.

    public final int getPriority()

    스레드의 우선순위를 확인할 수 있습니다.

    메소드의 매개변수 값은 setPriority임의적일 수 없습니다. MIN_PRIORITY에서 MAX_PRIORITY 사이여야 합니다. 스레드가 생성되면 우선 순위는 NORM_PRIORITY입니다.

    MIN_PRIORITY = 1.
    NORM_PRIORITY =5.
    MAX_PRIORITY = 10.

  2. 우선순위를 0으로 줄여 스레드를 중지할 수 있습니까?

    대답은 다음 기사에 있습니다. “인터뷰 질문 상위 50개. 주제: 멀티스레딩"

    포럼에서 찾았습니다.

    이 기사의 영어 버전이 있습니다: 신입생, 숙련된 프로그래머를 위한 상위 50가지 Java 스레드 인터뷰 질문 답변

    Java는 모든 것에 대해 풍부한 API를 제공하지만 아이러니하게도 스레드를 중지하는 편리한 방법을 제공하지 않습니다. JDK 1.0에는 잠재적인 교착 상태 위협으로 인해 향후 릴리스에서 더 이상 사용되지 않는 것으로 표시된 stop(), suspend()및 와 같은 여러 제어 메서드가 있었지만 Java API 개발자는 그 이후로 강력하고 스레드에 안전하며 우아한 중지 방법을 제공하려는 시도를 하지 않았습니다. 스레드. 프로그래머는 대부분 스레드가 메서드 나 . 수동으로 중지하려면 프로그래머는 변수를 활용하고 메서드에 루프가 있는지 각 반복에서 해당 값을 확인하거나 작업을 갑자기 취소하는 메서드로 스레드를 중단합니다 .resume()run()call()volatile booleanrun()interrupt()

    특히 질문에 대해 : 우선 순위를 0으로 설정하는 사람을 본 적이 없습니다.

    이에 대해 아는 사람이 있으면 댓글에 적어주세요.

  3. 왜 수업이 필요한가요 ThreadGroup?

    ThreadGroup다른 스레드 그룹도 포함할 수 있는 스레드 집합입니다. 스레드 그룹은 다른 모든 스레드 그룹이 상위 스레드(원래 스레드 제외)를 갖는 트리를 형성합니다. 스레드는 스레드 그룹의 데이터에 액세스할 수 있는 권한이 있지만 다른 그룹이나 상위 스레드 그룹에 대한 액세스 권한은 없습니다.

  4. 어떤 스레드 그룹에 속합니까 main-thread?

    어디서도 못 찾았어요)) 어디에 있는지 알려주세요))

  5. 패턴이란 무엇입니까 ThreadPool?

    Wikipedia 기사에서 이에 대한 발췌문이 있습니다.

    In computer programming, the thread pool pattern (also replicated workers or worker-crew model) is where a number of threads are created to perform a number of tasks, which are usually organized in a queue. The results from the tasks being executed might also be placed in a queue, or the tasks might return no result (for example, if the task is for animation). Typically, there are many more tasks than threads. As soon as a thread completes its task, it will request the next task from the queue until all tasks have been completed. The thread can then terminate, or sleep until there are new tasks available.

    The number of threads used is a parameter that can be tuned to provide the best performance. Additionally, the number of threads can be dynamic based on the number of waiting tasks. For example, a web server can add threads if numerous web page requests come in and can remove threads when those requests taper down. The cost of having a larger thread pool is increased resource usage. The algorithm used to determine when to create or destroy threads will have an impact on the overall performance:

    • create too many threads, and resources are wasted and time also wasted creating any unused threads
    • destroy too many threads and more time will be spent later creating them again
    • creating threads too slowly might result in poor client performance (long wait times)

    В компьютерном программировании есть модель пула потоков, где определенное число потоков создается для выполнения целого ряда задач, которые обычно организуются в очереди. Результаты от выполненных задач также могут быть помещены в очередь, либо задачи могут не возвращать ниHowого результата (например, если задача для анимации).

    Как правило, существует гораздо больше задач, чем потоков. Как только поток завершит свою задачу, он будет запрашивать следующую задачу из очереди, пока все задачи не будут завершены. Поток может затем прерваться or заснуть. Количество используемых потоков, это параметр, который может быть настроен, для обеспечения наилучшей производительности. Кроме того, число потоков может быть динамическим на основе количества возникающих задач. Например, веб-server может добавлять потоки, если requestы многочисленных веб-страниц приходят и может удалить потоки, когда этих requestов становится меньше. С увеличением размера пула потоков увеличивается использование ресурсов компьютера. Алгоритм, используемый для определения того, когда создавать or уничтожать потоки, будет иметь влияние на общую производительность: - Создать слишком много потоков значит тратить ресурсы и время впустую.

    Уничтожить слишком много потоков и больше времени будет потрачено позже снова для их создания - Creation потоков слишком медленно, может привести к снижению производительности клиента.

  6. Зачем нужен класс ThreadPoolExecutor?

    public class ThreadPoolExecutor extends AbstractExecutorService

    ExecutorService это выполняет каждую представленную задачу, используя один возможно из нескольких объединенных в пул потоков, обычно сконфигурированное использование Executors методы фабрики.

    Пулы потоков рассматривают две различных проблемы: они обычно обеспечивают улучшенную производительность, выполняя большие количества асинхронных задач, из-за уменьшенных издержек вызова на задачу, и они обеспечивают средство ограничения и управления ресурсами, включая потоки, использованные, выполняя набор задач. Каждый ThreadPoolExecutor также поддерживает немного основной статистики, такой How число завершенных задач.

    Whatбы быть полезным через широкий диапазон контекстов, этот класс обеспечивает много корректируемых параметров и рычагов расширяемости. Однако, программистов убеждают использовать более удобное Executors методы фабрики Executors.newCachedThreadPool() (неограниченный пул потоков, с автоматическим восстановлением потока), Executors.newFixedThreadPool(int) (пул потоков фиксированного размера) и Executors.newSingleThreadExecutor() (единственный фоновый поток), которые предварительно конфигурируют настройки для наиболее распространенных сценариев использования.

  7. Сколько способов создать нить вы знаете?

    На уровне языка есть два способа создания нити. Объект класса java.lang.Thread представляет собой нить, но ей требуется задача для исполнения, которая является an objectом, реализующим интерфейс java.lang.Runnable. Так How класс Thread реализует интерфейс Runnable, вы можете переопределить метод run() унаследовав ваш класс от Thread or реализовав в нём интерфейс Runnable.

  8. Для чего используется класс Future?

    Future хранит результат асинхронного вычисления. Вы можете запустить вычисление, предоставив кому-либо an object Future, и забыть о нем. Владелец an object Future может получить результат, когда он будет готов.

  9. В чем преимущества Callable над Runnable?

    Ссылка: Часть 2. Выполнение задач в многопоточном режиме

    Интерфейс Callable гораздо больше подходит для создания задач, предназначенных для параллельного выполнения, нежели интерфейс Runnable or тем более класс Thread. При этом стоит отметить, что возможность добавить подобный интерфейс появилась только начиная с версии Java 5, так How ключевая особенность интерфейса Callable – это использование параметризованных типов (generics), How показано в листинге.

    Листинг Creation задачи с помощью интерфейса Callable
    10	1 import java.util.concurrent.Callable;
    11	2 public class CallableSample implements Callable{
    12	3     public String call() throws Exception {
    13	4         if(Howое-то condition) {
    14	5             throw new IOException("error during task processing");
    15	6         }
    16	7         System.out.println("task is processing");
    17	8         return "result ";
    18	9     }
    19	10 }
    

    Сразу необходимо обратить внимание на строку 2, где указано, что интерфейс Callable является параметризованным, и его конкретная реализация – класс CallableSample, зависит от типа String. На строке 3 приведена сигнатура основного метода call в уже параметризованном варианте, так How в качестве типа возвращаемого значения также указан тип String. Фактически это означает, что была создана задача, результатом выполнения которой будет an object типа String (см. строку 8). Точно также можно создать задачу, в результате работы которой в методе call будет создаваться и возвращаться an object любого требуемого типа. Такое решение значительно удобнее по сравнению с методом run в интерфейсе Runnable, который не возвращает ничего (его возвращаемый тип – void) и поэтому приходится изобретать обходные пути, чтобы извлечь результат работы задачи.

    Еще одно преимущество интерфейса Callable – это возможность «выбрасывать» исключительные ситуации, не оказывая влияния на другие выполняющиеся задачи. На строке 3 указано, что из метода может быть «выброшена» исключительная ситуация типа Exception, что фактически означает любую исключительную ситуацию, так How все исключения являются потомками java.lang.Exception. На строке 5 эта возможность используется для создания контролируемой (checked) исключительной ситуации типа IOException. Метод run интерфейса Runnable вообще не допускал выбрасывания контролируемых исключительных ситуаций, а выброс неконтролируемой (runtime) исключительной ситуации приводил к остановке потока и всего applications.

  10. Можно ли отменить выполнение задачи, если использовать класс Future?

    Исходя из этой дискуссии, поднятой на хабре, выходит, что нельзя.

    У Future есть метод Future.cancel(boolean), который должен отменить выполнение задачи. Но если задача уже начала выполняться, вызов Future.cancel(true) на самом деле не остановит ее. В недрах реализации FutureTask выполняется code:

    if (mayInterruptIfRunning) {
    Thread r = runner;
    if (r != null)
    r.interrupt(); }

    Т.е. опять потоку, в котором выполняется задача, всего лишь рекомендуется прекратить выполнение. К тому же, мы не имеем даже возможности узнать выполняется ли задача в данный момент or нет. Есть, метод Future.isDone(), но опять мимо, он возвращает true не только когда задача завершила выполнение, а сразу после вызова Future.cancel(), даже если задача все еще выполняется (ведь Future.cancel(true) не останавливает задачу которая уже начала выполняться).

    Хорошо, если мы сами пишем весь code, тогда можно в нужных местах аккуратно обрабатывать Thread.isInterrupted() и все будет ОК. Но если мы запускаем сторонний code? Если у нас есть server расширяемый с помощью плагинов? Какой-нибудь криво написанный плагин может requestто привести к неработоспособному состоянию весь server ведь мы не можем корректно прервать выполнение зависшего plugin.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION