Maison > Java > javaDidacticiel > Statut du thread Java et analyse et exemples de méthodes courantes

Statut du thread Java et analyse et exemples de méthodes courantes

王林
Libérer: 2023-04-21 13:04:08
avant
1481 Les gens l'ont consulté

Vous pouvez obtenir l'état du thread via la méthode Thread.getState (il y a 6 états de threads au total)

NEW (nouveau) nouveau : pas encore démarré

RUNNABLE (runnable state) runnable : exécuté dans la JVM ; ou en attente du système d'exploitation Autres ressources (telles que les processeurs)

//Certains langages de programmation diviseront RUNNABLE en deux situations
//1.running
//2.ready
//Les deux types ci-dessus sont tous RUNNABLE en Java

BLOCKED (état bloqué) bloqué : attente du verrouillage du moniteur (verrouillage interne)

WAITING (état d'attente) attente : attente d'un autre thread

Appelez la méthode suivante qui sera à l'état d'attente

Object .wait sans valeur de délai d'attente

Pas de Thread.join avec valeur de délai d'attente

LockSupport.park

//Sera présenté en détail plus tard

TIMED_WAITING (état d'attente chronométré) timed_waiting

L'appel de la méthode suivante se fera dans l'attente chronométrée state

Thread.sleep

Object avec valeur de délai d'attente .wait

Thread.join avec valeur de délai d'attente

LockSupport.parkNanos

LockSupport.parkUnti

//Sera présenté en détail plus tard

TERMINATED (état de résiliation) : Terminé

Quelques exemples :

public class Main {
	public static void main(String[] a) {
		Thread dangqian = Thread.currentThread();//获取主线程
		System.out.println(dangqian.getState());//输出RUNNABLE
		//表示主线程正处于RUNNABLE状态
		
		Thread tj = new Thread();//新建1个线程
		System.out.println(tj.getState());//输出NEW
		
		Thread tj1 = new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("ACM");
			}
		});
		tj1.start();
		//启动执行完run方法后线程终止 此时处于TERMINATED状态
	}
}
Copier après la connexion

interruption de veille Introduction

Vous pouvez suspendre le thread en cours via la méthode Thread.sleep et entrer dans l'état WAITING

Pendant la période de pause, si la méthode d'interruption de l'objet thread est appelée pour interrompre le fil de discussion, une exception java.lang.InterruptedException sera levée

Des exemples (commentaires) sont introduits plus clairement :

public class Main {
	public static void main(String[] a) {
		Thread tj = new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("1");
				try {
					Thread.sleep(3000);//sleep是静态方法,所以通过类名来调用;让线程睡3s
				}catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println("2");
			}
		});
		tj.start();
		//因为是多线程,在执行tj线程时,主线程依然往下走
		try {
			Thread.sleep(1000);//让主线程睡1s
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("3");
		//由于tj线程睡得较久,所以先打印3,再打印2
		tj.interrupt();//中断此线程,但实际上只是给线程设置一个中断标志,线程仍会执行;在这里用于触发异常
	}
}
Copier après la connexion

Sortie :

1
3
2

join isAlive Introduction

Méthode A.join : Une fois l’exécution du thread A terminée, le thread actuel continue d’exécuter la tâche. Vous pouvez passer des paramètres pour spécifier le temps d'attente maximum

Méthode A.isAlive : Vérifiez si le fil A est toujours en vie

Instance :

public class Main {
	public static void main(String[] a) {
		Thread tj = new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("1");
				try {
					Thread.sleep(3000);//sleep是静态方法,所以通过类名来调用;让线程睡3s
				}catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println("2");
			}
		});
		tj.start();
		System.out.println(tj.isAlive());//此时3s未过,tj线程仍在执行;所以输出true
		try {
			tj.join();//等tj线程执行完毕再往下执行
			//tj.join(1000); 等待tj线程1s再往下执行
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("3");
	    System.out.println(tj.getState());
	    System.out.println(tj.isAlive());//tj线程已执行完毕;所以输出false
	}
}
Copier après la connexion

Sortie :

true
1
2
3
TERMINATED
false

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!

Étiquettes associées:
source:yisu.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal