JavaRush /Blog Java /Random-FR /Niveau 28. Réponses aux questions d'entretien sur le suje...
zor07
Niveau 31
Санкт-Петербург

Niveau 28. Réponses aux questions d'entretien sur le sujet du niveau

Publié dans le groupe Random-FR
Salut tout le monde! J'ai décidé de poursuivre mes études à Javarash, même si j'avais déjà trouvé un emploi en Java. Niveau 28. Réponses aux questions d'entretien sur le thème du niveau - 1J'écris ce blog pour moi, très paresseusement et, pourrait-on dire, sous pression. Je serai très heureux si quelqu'un le trouve utile, mais vous ne devriez pas l'utiliser comme source principale pour trouver des réponses aux questions de niveau.

1. Quelles sont les priorités des fils de discussion ?

Chaque thread du système a sa propre priorité. La priorité est un nombre compris entre 1 et 10 dans l'objet thread, une valeur plus élevée indiquant une priorité plus élevée. Le système exécute en premier les threads de priorité supérieure, et les threads de priorité inférieure reçoivent du temps CPU uniquement lorsque leurs homologues plus privilégiés sont inactifs. Vous pouvez travailler avec les priorités des threads à l'aide de deux fonctions :
void setPriority(int priority) //устанавливает приоритет потока.
Les valeurs de priorité possibles sont MIN_PRIORITY, NORM_PRIORITY et MAX_PRIORITY.
int getPriority() // получает приоритет потока.
Source Si la priorité n'est pas spécifiée, le thread reçoit la priorité 5 - moyenne. La priorité du thread n'affecte pas beaucoup son fonctionnement, mais est plutôt de nature consultative. Si plusieurs threads en veille doivent être démarrés, la machine Java démarrera en premier le thread ayant la priorité la plus élevée. La machine Java gère les threads comme bon lui semble. Les threads de faible priorité ne seront pas inactifs. Ils recevront simplement moins de temps que les autres, mais seront quand même exécutés. Dans la plupart des cas, les threads s'exécutent toujours avec la même priorité. Essayer de donner plus de temps à un thread qu'à d'autres indique souvent une erreur architecturale dans le programme.

2. Est-il possible d'arrêter un thread en réduisant sa priorité à 0 ?

Non. Sera jetéIllegalArgumentException

3. Pourquoi la classe ThreadGroup est-elle nécessaire ?

Pour empêcher un thread d'arrêter et d'interrompre tous les threads d'affilée, le concept de « groupe de threads » a été introduit. Un thread ne peut affecter que les autres threads contenus dans le même groupe que lui. ThreadGroupest une classe qui gère des groupes de threads. Cette approche vous permet de protéger les threads des modifications indésirables. Parfois, vous devez exécuter du code auquel vous ne pouvez pas faire confiance à 100 %. Par conséquent, il est pratique de placer tous ses threads dans un groupe séparé et de les empêcher d'interférer avec le travail du groupe de threads principal. Autrement dit, pour gérer des groupes de threads

4. À quel groupe de threads appartient le thread principal ?

main

5. Qu'est-ce que le modèle ThreadPool

En termes généraux, un modèle ThreadPoolest un groupe de threads qui résolvent des groupes de problèmes. Les tâches sont organisées en file d'attente. Une fois qu'un thread a fini de travailler sur une tâche, il demande la tâche suivante à la file d'attente jusqu'à ce que toutes les tâches de la file d'attente soient terminées. Après cela, le thread peut se terminer ou se mettre en veille jusqu'à ce que de nouvelles tâches apparaissent dans la file d'attente.

6. Pourquoi avons-nous besoin de la classe ThreadPoolExecutor ?

Pour résoudre un grand nombre de petits problèmes avec un groupe de threads. L’utilisation d’une classe évite le gaspillage des ressources de la machine. Car créer son propre fil de discussion pour chaque tâche n’est pas très rationnel. La machine Java alloue beaucoup de ressources pour chaque thread. En d’autres termes, créer et détruire un thread épuisé peut faire perdre plus de ressources et de temps que la tâche elle-même. Les développeurs Java ont trouvé une solution élégante à ce problème : ThreadPoolExecutor. Il s'agit d'une classe qui contient deux éléments :
  • Une file d'attente de tâches à laquelle vous pouvez ajouter des tâches telles qu'elles apparaissent dans le programme.
  • Pool de threads (groupe de threads) – qui effectuent ces tâches.
Dans ce cas, les threads ne sont pas détruits une fois la tâche terminée, mais s'endorment. Pour commencer à accomplir une nouvelle tâche dès qu’elle apparaît.

7. Combien de façons de créer un fil de discussion connaissez-vous ? (Thread, Exécutable, Appelable )

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. A quoi sert la classe Future ?

Cet objet peut être utilisé pour savoir si une tâche est déjà terminée, mais aussi pour obtenir le résultat de son exécution. boolean cancel(boolean mayInterrupt); // Останавливает задачу.
boolean isCancelled(); //returns true, если задача была остановлена.
boolean isDone(); //returns true, если выполнение задачи завершено.
V get() throws InterruptedException, ExecutionException; //returns результат вызова метода call or кидает исключение, если оно было.

9. Quels sont les avantages de Callable par rapport à Runnable ?

En utilisant, Callablenous pouvons savoir si la tâche est terminée et connaître son résultat, beaucoup plus facilement qu'en utilisantRunnable

10. Est-il possible d'annuler l'exécution d'une tâche si on utilise la classe Future ?

C'est possible si la tâche est dans la file d'attente et en attente d'exécution, sinon ce n'est pas un fait
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION