JavaRush /Java Blog /Random-JA /レベル 28. レベルのトピックに関するインタビューの質問への回答
zor07
レベル 31
Санкт-Петербург

レベル 28. レベルのトピックに関するインタビューの質問への回答

Random-JA グループに公開済み
こんにちは、みんな!すでに Java での仕事を見つけていたにもかかわらず、私は Javarash で勉強を続けることにしました。 レベル 28. レベル - 1 のトピックに関するインタビューの質問への回答私はこのブログを自分自身のために、とても怠惰に、そしてプレッシャーを受けながら書いていると言えるかもしれません。誰かが役に立つと思ってくれればとてもうれしいですが、レベルの質問に対する答えを見つけるための主な情報源として使用しないでください。

1. スレッドの優先順位は何ですか?

システム内の各スレッドには独自の優先順位があります。優先度はスレッド オブジェクト内の 1 ~ 10 の数値で、値が大きいほど優先度が高くなります。システムは優先度の高いスレッドを最初に実行し、優先度の低いスレッドは、より特権のあるスレッドがアイドル状態の場合にのみ CPU 時間を受け取ります。次の 2 つの関数を使用して、スレッドの優先順位を操作できます。
void setPriority(int priority) //устанавливает приоритет потока.
可能な優先度の値は、MIN_PRIORITY、NORM_PRIORITY、および MAX_PRIORITY です。
int getPriority() // получает приоритет потока.
ソース 優先順位が指定されていない場合、スレッドは優先順位 5 (中) を受け取ります。スレッドの優先順位はその動作に大きな影響を与えませんが、本質的にはむしろ助言的なものです。起動する必要があるスリープ状態のスレッドが複数ある場合、Java マシンは優先度の高いスレッドを最初に起動します。Java マシンは、適切と思われるとおりにスレッドを管理します。優先度の低いスレッドはアイドル状態になりません。彼らは他の人よりも時間が短いだけですが、それでも処刑されます。ほとんどの場合、スレッドは常に同じ優先順位で実行されます。1 つのスレッドに他のスレッドよりも多くの時間を与えようとすると、多くの場合、プログラムのアーキテクチャ上のエラーが示されます。

2. スレッドの優先順位を 0 に下げて停止することはできますか?

いいえ。投げられますIllegalArgumentException

3. ThreadGroup クラスが必要な理由は何ですか?

任意のスレッドが停止したり、連続するすべてのスレッドが中断されたりすることを防ぐために、「スレッドのグループ」の概念が導入されました。スレッドは、それと同じグループに含まれる他のスレッドにのみ影響を与えることができます。ThreadGroupスレッドのグループを管理するクラスです。このアプローチにより、スレッドを不要な変更から保護できます。100% 信頼できないコードを実行しなければならない場合があります。したがって、すべてのスレッドを別のグループに配置し、スレッドのメイン グループの作業に干渉しないようにすると便利です。言い換えれば、スレッドのグループを管理するため

4. main-thread はスレッドのどのグループに属しますか?

main

5. ThreadPool パターンとは何ですか

一般に、パターンとはThreadPool、問題のグループを解決するスレッドのグループです。タスクはキューに編成されます。スレッドはタスクの作業を終了すると、キュー内のすべてのタスクが完了するまでキューに次のタスクを要求します。この後、新しいタスクがキューに表示されるまで、スレッドは終了するかスリープ状態になります。

6. ThreadPoolExecutor クラスが必要なのはなぜですか?

多数の小さな問題をスレッドのグループで解決する。クラスを使用すると、マシン リソースの無駄な使用が回避されます。タスクごとに独自のスレッドを作成するのはあまり合理的ではないためです。Java マシンは、各スレッドに非常に多くのリソースを割り当てます。つまり、使用済みスレッドの作成と破棄は、タスク自体よりも多くのリソースと時間を浪費する可能性があります。Java 開発者は、この問題に対する洗練された解決策を考え出しましたThreadPoolExecutor。これは、内部に 2 つのものを含むクラスです。
  • プログラムに表示されるタスクを追加できるタスク キュー。
  • スレッドのプール (スレッドのグループ) – これらのタスクを実行します。
この場合、スレッドはタスクの完了後に破棄されず、スリープ状態になります。新しいタスクが表示されたらすぐに完了を開始すること。

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