JavaRush /Java-Blog /Random-DE /Level 28. Antworten auf Interviewfragen zum Levelthema
zor07
Level 31
Санкт-Петербург

Level 28. Antworten auf Interviewfragen zum Levelthema

Veröffentlicht in der Gruppe Random-DE
Hallo zusammen! Ich beschloss, mein Studium in Javarash fortzusetzen, obwohl ich bereits einen Job in Java gefunden hatte. Level 28. Antworten auf Interviewfragen zum Thema Level - 1Ich schreibe diesen Blog für mich selbst, sehr träge und sozusagen unter Druck. Ich würde mich sehr freuen, wenn jemand es nützlich findet, aber Sie sollten es nicht als Hauptquelle für die Suche nach Antworten auf Level-Fragen verwenden.

1. Was sind die Thread-Prioritäten?

Jeder Thread im System hat seine eigene Priorität. Priorität ist eine Zahl im Thread-Objekt von 1 bis 10, wobei ein höherer Wert eine höhere Priorität angibt. Das System führt Threads mit höherer Priorität zuerst aus und Threads mit niedrigerer Priorität erhalten nur dann CPU-Zeit, wenn ihre privilegierteren Gegenstücke inaktiv sind. Sie können mit Thread-Prioritäten mithilfe von zwei Funktionen arbeiten:
void setPriority(int priority) //устанавливает приоритет потока.
Mögliche Prioritätswerte sind MIN_PRIORITY, NORM_PRIORITY und MAX_PRIORITY.
int getPriority() // получает приоритет потока.
Quelle Wenn keine Priorität angegeben ist, erhält der Thread die Priorität 5 – mittel. Die Thread-Priorität hat keinen großen Einfluss auf den Betrieb, sondern hat eher beratenden Charakter. Wenn mehrere schlafende Threads gestartet werden müssen, startet die Java-Maschine zuerst den Thread mit der höheren Priorität. Die Java-Maschine verwaltet die Threads nach eigenem Ermessen. Threads mit niedriger Priorität werden nicht inaktiv sein. Sie erhalten einfach weniger Zeit als andere, werden aber trotzdem hingerichtet. In den meisten Fällen werden Threads immer mit der gleichen Priorität ausgeführt. Der Versuch, einem Thread mehr Zeit als anderen zu geben, deutet oft auf einen Architekturfehler im Programm hin.

2. Ist es möglich, einen Thread zu stoppen, indem man seine Priorität auf 0 reduziert?

Nein. Wird geworfenIllegalArgumentException

3. Warum wird die ThreadGroup-Klasse benötigt?

Um zu verhindern, dass ein Thread alle Threads hintereinander stoppt und unterbricht, wurde das Konzept einer „Gruppe von Threads“ eingeführt. Ein Thread kann sich nur auf andere Threads auswirken, die in derselben Gruppe wie er enthalten sind. ThreadGroupist eine Klasse, die Gruppen von Threads verwaltet. Mit diesem Ansatz können Sie Threads vor unerwünschten Änderungen schützen. Manchmal muss man Code ausführen, dem man nicht hundertprozentig vertrauen kann. Daher ist es praktisch, alle Threads in einer separaten Gruppe zu platzieren und zu verhindern, dass sie die Arbeit der Hauptthreadgruppe beeinträchtigen. Mit anderen Worten, um Gruppen von Threads zu verwalten

4. Zu welcher Threadgruppe gehört der Hauptthread?

main

5. Was ist das ThreadPool-Muster?

Im Allgemeinen ist ein Muster ThreadPooleine Gruppe von Threads, die Gruppen von Problemen lösen. Aufgaben werden in einer Warteschlange organisiert. Sobald ein Thread mit der Arbeit an einer Aufgabe fertig ist, fordert er die nächste Aufgabe aus der Warteschlange an, bis alle Aufgaben in der Warteschlange abgeschlossen sind. Danach kann der Thread beendet werden oder in den Ruhezustand gehen, bis neue Aufgaben in der Warteschlange erscheinen.

6. Warum brauchen wir die ThreadPoolExecutor-Klasse?

Eine große Anzahl kleiner Probleme mit einer Gruppe von Threads lösen. Durch die Verwendung einer Klasse wird die verschwenderische Nutzung von Maschinenressourcen vermieden. Weil es nicht sehr rational ist, für jede Aufgabe einen eigenen Thread zu erstellen. Die Java-Maschine weist jedem Thread ziemlich viele Ressourcen zu. Mit anderen Worten: Das Erstellen und Zerstören eines verbrauchten Threads kann mehr Ressourcen und Zeit verschwenden als die Aufgabe selbst. Java-Entwickler haben für dieses Problem eine elegante Lösung gefunden – ThreadPoolExecutor. Dies ist eine Klasse, die zwei Dinge enthält:
  • Eine Aufgabenwarteschlange, zu der Sie Aufgaben hinzufügen können, sobald sie im Programm erscheinen.
  • Thread-Pool (Gruppe von Threads) – die diese Aufgaben ausführen.
In diesem Fall werden die Threads nach Abschluss der Aufgabe nicht zerstört, sondern schlafen ein. Um mit der Erledigung einer neuen Aufgabe zu beginnen, sobald sie angezeigt wird.

7. Wie viele Möglichkeiten kennen Sie, einen Thread zu erstellen? (Thread, ausführbar, aufrufbar )

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. Wofür wird die Future-Klasse verwendet?

Dieses Objekt kann verwendet werden, um herauszufinden, ob eine Aufgabe bereits abgeschlossen wurde, und um das Ergebnis ihrer Ausführung zu erhalten. boolean cancel(boolean mayInterrupt); // Останавливает задачу.
boolean isCancelled(); //kehrt zurück true, если задача была остановлена.
boolean isDone(); //kehrt zurück true, если выполнение задачи завершено.
V get() throws InterruptedException, ExecutionException; //kehrt zurück результат вызова метода call oder кидает исключение, если оно было.

9. Was sind die Vorteile von Callable gegenüber Runnable?

Mit Hilfe Callablekönnen wir viel einfacher herausfinden, ob die Aufgabe abgeschlossen wurde, und ihr Ergebnis ermitteln als mitRunnable

10. Ist es möglich, die Ausführung einer Aufgabe abzubrechen, wenn wir die Future-Klasse verwenden?

Es ist möglich, wenn sich die Aufgabe in der Warteschlange befindet und auf ihre Ausführung wartet, andernfalls ist dies keine Tatsache
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION