JavaRush /Java Blog /Random-KO /레벨 28. 레벨 주제에 대한 인터뷰 질문에 대한 답변
zor07
레벨 31
Санкт-Петербург

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

Random-KO 그룹에 게시되었습니다
안녕하세요 여러분! 나는 이미 Java에서 일자리를 찾았음에도 불구하고 Javarash에서 공부를 계속하기로 결정했습니다. 레벨 28. 레벨-1 주제에 관한 인터뷰 질문에 대한 답변나는 나 자신을 위해 매우 게으르게, 그리고 압박감을 느끼며 이 블로그를 작성합니다. 누군가가 그것이 유용하다고 생각하면 매우 기쁠 것입니다. 그러나 레벨 질문에 대한 답변을 찾는 주요 소스로 사용해서는 안됩니다.

1. 스레드 우선순위는 무엇입니까?

시스템의 각 스레드에는 고유한 우선순위가 있습니다. 우선순위는 스레드 개체에 있는 1부터 10까지의 숫자이며, 값이 높을수록 우선순위가 높습니다. 시스템은 우선 순위가 높은 스레드를 먼저 실행하고, 우선 순위가 낮은 스레드는 더 많은 권한을 가진 스레드가 유휴 상태일 때만 CPU 시간을 받습니다. 다음 두 가지 기능을 사용하여 스레드 우선순위로 작업할 수 있습니다.
void setPriority(int priority) //устанавливает приоритет потока.
가능한 우선순위 값은 MIN_PRIORITY, NORM_PRIORITY 및 MAX_PRIORITY입니다.
int getPriority() // получает приоритет потока.
소스 우선순위가 지정되지 않은 경우 스레드는 우선순위 5 - 중간을 받습니다. 스레드 우선순위는 작업에 큰 영향을 미치지 않지만 본질적으로 권고 사항입니다. 시작해야 할 휴면 스레드가 여러 개 있는 경우 Java 시스템은 우선 순위가 높은 스레드를 먼저 시작합니다. Java 시스템은 적절하다고 판단되는 대로 스레드를 관리합니다. 우선순위가 낮은 스레드는 유휴 상태가 아닙니다. 그들은 다른 사람들보다 시간이 덜 걸릴 뿐이지만 여전히 처형될 것입니다. 대부분의 경우 스레드는 항상 동일한 우선순위로 실행됩니다. 한 스레드에 다른 스레드보다 더 많은 시간을 주려고 하면 프로그램의 구조적 오류를 나타내는 경우가 많습니다.

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

아니요. 던져질 것이다IllegalArgumentException

3. ThreadGroup 클래스가 필요한 이유는 무엇입니까?

어떤 스레드가 연속적으로 모든 스레드를 중지하고 중단하는 것을 방지하기 위해 "스레드 그룹"이라는 개념이 도입되었습니다. 스레드는 자신과 동일한 그룹에 포함된 다른 스레드에만 영향을 미칠 수 있습니다. ThreadGroup스레드 그룹을 관리하는 클래스입니다. 이 접근 방식을 사용하면 원치 않는 변경으로부터 스레드를 보호할 수 있습니다. 때로는 100% 신뢰할 수 없는 코드를 실행해야 할 때도 있습니다. 따라서 모든 스레드를 별도의 그룹에 배치하고 기본 스레드 그룹의 작업을 방해하지 않도록 방지하는 것이 편리합니다. 즉, 스레드 그룹을 관리하려면

4. 메인 스레드는 어떤 스레드 그룹에 속합니까?

main

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

일반적으로 패턴은 ThreadPool문제 그룹을 해결하는 스레드 그룹입니다. 작업은 대기열로 구성됩니다. 스레드가 작업 작업을 마치면 대기열의 모든 작업이 완료될 때까지 대기열에서 다음 작업을 요청합니다. 그 후에는 새 작업이 대기열에 나타날 때까지 스레드가 종료되거나 절전 모드로 전환될 수 있습니다.

6. ThreadPoolExecutor 클래스가 필요한 이유는 무엇입니까?

스레드 그룹으로 수많은 작은 문제를 해결합니다. 클래스를 사용하면 시스템 리소스의 낭비를 방지할 수 있습니다. 각 작업에 대해 자신만의 스레드를 만드는 것은 그리 합리적이지 않기 때문입니다. Java 시스템은 각 스레드에 대해 상당히 많은 리소스를 할당합니다. 즉, 소모된 스레드를 생성하고 파괴하는 것은 작업 자체보다 더 많은 리소스와 시간을 낭비할 수 있습니다. Java 개발자는 이 문제에 대한 우아한 해결책을 제시했습니다 ThreadPoolExecutor. 이것은 내부에 두 가지가 있는 클래스입니다.
  • 프로그램에 나타나는 작업을 추가할 수 있는 작업 대기열입니다.
  • 스레드 풀(스레드 그룹) - 이러한 작업을 수행합니다.
이 경우 작업을 완료한 후에도 스레드가 삭제되지 않고 잠자기 상태가 됩니다. 새로운 작업이 나타나자마자 완료를 시작합니다.

7. 스레드를 만드는 방법은 몇 가지나 알고 있나요? (스레드, 실행 가능, 호출 가능 )

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. Future 클래스는 어떤 용도로 사용되나요?

이 객체를 사용하여 작업이 이미 완료되었는지 여부를 확인하고 실행 결과를 얻을 수도 있습니다. boolean cancel(boolean mayInterrupt); // Останавливает задачу.
boolean isCancelled(); //returns true, если задача была остановлена.
boolean isDone(); //returns true, если выполнение задачи завершено.
V get() throws InterruptedException, ExecutionException; //returns результат вызова метода call or кидает исключение, если оно было.

9. Runnable에 비해 Callable의 장점은 무엇입니까?

사용하면 Callable작업이 완료되었는지 여부를 확인하고 사용하는 것보다 훨씬 쉽게 결과를 확인할 수 있습니다.Runnable

10. Future 클래스를 사용하면 작업 실행을 취소할 수 있나요?

작업이 대기열에 있고 실행을 기다리는 경우 가능합니다. 그렇지 않으면 사실이 아닙니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION