Maison >Java >javaDidacticiel >Exemple d'analyse des threads démons et des threads non-démons en Java
Cet article présente principalement le thread démon et le thread non-démon en Java. L'éditeur pense que c'est plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil
Récemment, j'ai refait des recherches sur les connaissances de base de Java et j'ai découvert que trop de connaissances avaient été ignorées dans le passé. En comparant le mécanisme de thread de Java, il existe deux types de threads. Java : User Thread (thread utilisateur), Daemon Thread (thread démon), (PS : je l'ai ignoré auparavant).
Les étudiants qui ont étudié le développement Unix mais n'ont pas étudié Java en détail peuvent être confus. Il n'y a pas de soi-disant thread démon dans le système d'exploitation, seulement un processus démon, mais le mécanisme du langage Java est construit sur la JVM. Fondamentalement, cela signifie que la plate-forme Java protège la couche inférieure du système d'exploitation, afin qu'elle puisse construire un mécanisme qui lui est bénéfique dans sa propre plate-forme virtuelle, et que le concepteur du langage ou de la plate-forme est plus ou moins responsable de cela. Influencé par la pensée Unix et que le mécanisme de thread démon est adapté aux plates-formes telles que JVM, les threads démon ont vu le jour.
Le rôle de Daemon est de fournir des services pour l'exécution d'autres threads, tels que les threads GC. En fait, il n'y a essentiellement aucune différence entre les threads User Thread et les threads démon Daemon Thread. La seule différence réside dans le départ de la machine virtuelle : si tous les threads utilisateur évacuent, alors Daemon Thread n'aura aucun thread à servir, donc la machine virtuelle. sort également.
Le thread démon n'est pas fourni dans la machine virtuelle. Les utilisateurs peuvent également définir le thread démon par eux-mêmes. Méthode : public final void setDaemon(boolean on);
1 ), thread.setDaemon(true) doit être défini avant thread.start(), sinon une IllegalThreadStateException sera levée. Vous ne pouvez pas définir un thread normal en cours d’exécution comme thread démon. (Remarque : ce point est évidemment différent du processus démon. Une fois le processus démon créé, il permet au processus de se débarrasser du contrôle de la session d'origine + le processus se débarrasse du contrôle du groupe de processus d'origine + le processus se débarrasse du contrôle du terminal de contrôle d'origine ; il s'appuie donc sur le virtuel. Le mécanisme de langage de la machine est essentiellement différent du langage au niveau du système)2). aussi celui de Daemon. (Il s'agit d'une différence essentielle : le processus enfant qui sort du processus démon fork() n'est plus un processus démon. Bien qu'il copie les informations liées au processus du processus parent, le processus parent du processus enfant n'est pas le processus démon. processus init. , le soi-disant processus démon signifie essentiellement "le processus parent meurt, init l'adopte, puis les fichiers 0, 1, 2 sont tous /dev/null, et le répertoire actuel est /") 3), toutes les applications ne peuvent pas être affectées à des threads démon pour exécuter des services, tels que des opérations de lecture et d'écriture ou une logique de calcul. Parce que la machine virtuelle s'est peut-être fermée avant que Daemon Thread puisse effectuer l'opération. Exemple ://完成文件输出的守护线程任务 import java.io.*; class TestRunnable implements Runnable{ public void run(){ try{ Thread.sleep(1000);//守护线程阻塞1秒后运行 File f=new File("daemon.txt"); FileOutputStream os=new FileOutputStream(f,true); os.write("daemon".getBytes()); } catch(IOException e1){ e1.printStackTrace(); } catch(InterruptedException e2){ e2.printStackTrace(); } } } public class TestDemo2{ public static void main(String[] args) throws InterruptedException { Runnable tr=new TestRunnable(); Thread thread=new Thread(tr); thread.setDaemon(true); //设置守护线程 thread.start(); //开始执行分进程 } }Résultat de l'exécution : Il n'y a pas de chaîne "démon" dans le fichier daemon.txt. Mais si vous commentez thread.setDaemon(true); //Set démon thread, le fichier daemon.txt peut être écrit dans la chaîne du démon
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!