Table des matières
Opérations courantes des threads
Thread démon (thread d'arrière-plan)
Sérialisation du thread
Le thread principal définit l'état du terminal du thread sur true
Maison Java javaDidacticiel Quelles sont les opérations couramment utilisées des threads Java ?

Quelles sont les opérations couramment utilisées des threads Java ?

Apr 24, 2023 am 11:55 AM
java

Opérations courantes des threads

Définissez le nom du fil : setName()

Obtenez le nom du fil : getName()

Identifiant unique du fil : getId()

// 自定义线程名称
String threadName = "threadName";
// 构造方法方式
Thread thread = new Thread(() -> {
    System.out.println("线程名=" + Thread.currentThread().getName());
},threadName);
// set方法方式
// thread.setName(threadName);
System.out.println("线程唯一Id=" + thread.getId());
Copier après la connexion

Démarrage du fil : start()

Déterminez si le fil est Alive: isAlive()

// 线程启动
thread.start();
System.out.println("是否为存活线程=" + thread.isAlive());
Copier après la connexion

Méthode du thread : run() /call()

Méthode qui sera appelée après le démarrage du fil. Ce que le thread veut faire est écrit dans la méthode run/call. Il n'est pas nécessaire de l'appeler directement. Une fois le thread démarré, il appellera run() /call(). Si le programme appelle directement run/call sans démarrer le thread, alors il n'appartient pas à la programmation multi-thread, mais il appartient au thread actuel pour appeler directement les méthodes ordinaires.

Obtenir l'objet thread actuel : currentThread()

Pour utiliser la méthode non statique du thread actuel, vous devez d'abord obtenir l'objet thread

// 获取当前线程对象
Thread currentThread = Thread.currentThread();
// 对当前线程做一些操作
System.out.println(currentThread.getName());
try {
    // sleep 静态方法则不需要
    Thread.sleep(1000);
} catch (InterruptedException e) {
    e.printStackTrace();
}
Copier après la connexion

Pour les opérations de contrôle de l'état du thread (cycle de vie), veuillez vous référer au précédent article.

Thread démon (thread d'arrière-plan)

Le gardien des threads ordinaires (threads utilisateur). La tâche du thread démon est de fournir des services pour d'autres threads. S'il n'y a aucun thread utilisateur dans le processus, alors le thread démon n'a aucune signification et la JVM se terminera également. Les threads démons typiques incluent le thread de récupération de place de la JVM, et le démarrage du système d'exploitation démarrera également les threads démon de divers modules.

Définissez le thread comme thread démon : setDaeman()

Remarque : Cette méthode doit être appelée avant la méthode start()

public static void main(String[] args) {
    Thread thread = new Thread(() -> {
        System.out.println("线程名="+Thread.currentThread().getName());
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 这一句不会打印出来,因为main线程(目前唯一的普通线程)等待1秒后已经结束了
        System.out.println("守护线程的状态=" + Thread.currentThread().getState());
    });
    // 守护线程
    thread.setDaemon(true);
    // 线程启动
    thread.start();
    System.out.println("是否为守护线程=" + thread.isDaemon());
}
Copier après la connexion

Sérialisation du thread

Le thread exécutant la méthode join() entre dans le réveil en attente state (WAITING), jusqu'à ce que le thread qui a appelé cette méthode se termine, puis passe de l'état de réveil en attente à l'état exécutable (RUNNABLE). La méthode join() est une méthode de la classe Thread. La méthode sous-jacente consiste à utiliser la méthode wait() pour réaliser l'attente du thread. Lorsque le thread isAlive() est faux, la sérialisation du thread est réalisée : un thread en appelle un autre. objet thread. join() pour implémenter l’exécution de la sérialisation des threads. Par exemple : un bon plat

public class DemoCooking {
    
    public static void main(String[] args) {
        Thread mainThread = Thread.currentThread();
        // 1.买菜
        Thread buyThread = new Thread(new CookingThread(mainThread,"买菜"),"buyThread");
        // 2.洗菜
        Thread washThread = new Thread(new CookingThread(buyThread,"洗菜"),"washThread");
        // 3.切菜
        Thread cutThread = new Thread(new CookingThread(washThread,"切菜"),"cutThread");
        // 4.炒菜
        Thread scrambleThread = new Thread(new CookingThread(cutThread,"炒菜"),"scrambleThread");

        // 不受线程启动顺序的影响
        scrambleThread.start();
        washThread.start();
        cutThread.start();
        buyThread.start();
        
        // main线程先执行完才可以开始:买菜
        System.out.println("开始准备……");
    }

    public static class CookingThread implements Runnable{
        private final Thread thread;
        private final String job;

        public CookingThread(Thread thread, String job){
            this.thread = thread;
            this.job = job;
        }
        @Override
        public void run() {
            String name = Thread.currentThread().getName()+":";
            try {
                thread.join();

                System.out.println(name + job + "开始");
                Thread.sleep(1000);
                System.out.println(name + job + "结束");
                Thread.sleep(1000); // 偷懒下
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
Copier après la connexion

Résultat de l'exécution : principal > buyThread > washThread > cutThread > scrambleThread >

washThread : Début du lavage

washThread : Fin du lavage

cutThread : Début du hachage

cutThread : Fin du hachage

scrambleThread : Début du sauté
scrambleThread : Fin du sauté



Priorité du fil

Définir la priorité du thread actuel, plus la priorité du thread est élevée, plus le thread peut être exécuté plusieurs fois. La priorité d'un thread Java est représentée par un nombre entier. La plage de priorité est de 1 à 10 et la valeur par défaut est de 5.

Méthode setPriority(int) : définit la priorité du thread.

Méthode getPriority : obtenez la priorité du fil de discussion.

public static void main(String[] args) {

    Thread thread = new Thread(() -> {
        System.out.println("线程1");
    });
    thread.setPriority(10);
    Thread thread1 = new Thread(() -> {
        System.out.println("线程2");
    });
    thread1.setPriority(1);
    thread.start();
    thread1.start();

    System.out.println("线程默认的优先级为=" + Thread.currentThread().getPriority());

}
Copier après la connexion
Interruption du thread

Utilisez la méthode interruption() pour définir l'indicateur d'interruption du thread = true, de sorte qu'un signal d'interruption soit émis lorsque le thread est "bloqué". Si le thread est bloqué, en attente de réveil ou en attente d'expiration (Object.wait, Thread.join et Thread.sleep), il recevra une exception d'interruption (InterruptedException) et mettra fin à l'état plus tôt. En revanche, si le thread est dans l'état "RUNNABLE", l'indicateur d'interruption n'aura aucun effet.

Cas 1 : L'interruption du thread est valide

public static void main(String[] args) {
    Thread thread = new Thread(() -> {
        System.out.println("线程1");
        try {
            // 闹钟1分钟后响
            Thread.sleep(60000);
            System.out.println("闹钟响了");
        } catch (InterruptedException e) {
            // 提前退出超时等待状态
            System.out.println("发生异常,提前醒了,闹钟没响手动关了");
        }

        System.out.println("继续执行该线程的后续程序……");

    });
    thread.setPriority(1);
    thread.start();
    thread.interrupt();
    System.out.println("main线程将thread 终端状态设置为 "+thread.isInterrupted());
}
Copier après la connexion

Résultat de l'exécution :

Le thread principal définit l'état du terminal du thread sur true

Thread 1

Une exception s'est produite et s'est réveillée tôt. L'alarme n'a pas retenti et a été désactivée manuellement.

Continuer à exécuter le suivi du programme du thread...

Cas 2 : L'interruption du thread n'est pas valide

public static void main(String[] args) {
    Thread thread1 = new Thread(() -> {
        System.out.println("线程" + Thread.currentThread().getName());
        while (true) {
            System.out.print(Thread.currentThread().getState() + "\t");
        }
    });
    thread1.start();
    thread1.interrupt();
}
Copier après la connexion
Résultat de l'exécution : Le thread continue d'imprimer son statut comme RUNNABLE.

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

Comment exécuter votre première application Spring Boot dans Spring Tool Suite? Comment exécuter votre première application Spring Boot dans Spring Tool Suite? Feb 07, 2025 pm 12:11 PM

Spring Boot simplifie la création d'applications Java robustes, évolutives et prêtes à la production, révolutionnant le développement de Java. Son approche "Convention sur la configuration", inhérente à l'écosystème de ressort, minimise la configuration manuelle, allo

See all articles