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. J'é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.
7. Combien de façons de créer un fil de discussion connaissez-vous ? (Thread, Exécutable, Appelable
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.ThreadGroup
est 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èleThreadPool
est 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.
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,Callable
nous pouvons savoir si la tâche est terminée et connaître son résultat, beaucoup plus facilement qu'en utilisantRunnable
GO TO FULL VERSION