> Java > java지도 시간 > 본문

Java 스레드 상태 및 일반적인 방법 분석 및 예

王林
풀어 주다: 2023-04-21 13:04:08
앞으로
1459명이 탐색했습니다.

Thread.getState 메소드를 통해 스레드의 상태를 얻을 수 있습니다(스레드에는 총 6가지 상태가 있습니다)

NEW(신규) new: 아직 시작되지 않음

RUNNABLE(실행 가능 상태) runnable: JVM에서 실행 중; 또는 운영 체제를 기다리는 중 다른 리소스(프로세서 등)

//일부 프로그래밍 언어에서는 RUNNABLE을 두 가지 상황으로 구분합니다
//1.running
//2.ready
//위 두 가지 유형은 모두 Java에서 RUNNABLE

BLOCKED(Blocked 상태) Blocked: 모니터 잠금(내부 잠금)을 기다리는 중

WAITING(대기 상태) 대기 중: 다른 스레드를 기다리는 중

다음 메소드를 호출하면 대기 상태가 됩니다

Object .wait with timeout value

No Thread.join with timeout value

LockSupport.park

//자세히 소개 예정

TIMED_WAITING (시간 제한 대기 상태) timed_waiting

다음 메서드를 호출하면 시간 제한 대기 상태가 됩니다. state

Thread.sleep

시간 초과 값이 있는 개체 .wait

Thread.join 시간 초과 값이 있음

LockSupport.parkNanos

LockSupport.parkUnti

//나중에 자세히 소개됩니다

TERMINATED(종료 상태): Completed

몇 가지 예:

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状态
	}
}
로그인 후 복사

sleep 인터럽트 소개

Thread.sleep 메서드를 통해 현재 스레드를 일시 중지하고 WAITING 상태로 들어갈 수 있습니다.

일시 중지 기간 동안 스레드 개체의 인터럽트 메서드를 호출하여 인터럽트를 수행하면 스레드에서 java.lang.InterruptedException 예외가 발생합니다

예제(주석)가 더 명확하게 소개됩니다. 스레드 A가 실행을 완료한 후 현재 스레드는 계속해서 작업을 실행합니다. 최대 대기 시간을 지정하는 매개 변수를 전달할 수 있습니다.

A.isAlive 메서드: 스레드 A가 아직 살아 있는지 확인합니다.

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();
		//因为是多线程,在执行tj线程时,主线程依然往下走
		try {
			Thread.sleep(1000);//让主线程睡1s
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("3");
		//由于tj线程睡得较久,所以先打印3,再打印2
		tj.interrupt();//中断此线程,但实际上只是给线程设置一个中断标志,线程仍会执行;在这里用于触发异常
	}
}
로그인 후 복사

Output:
true

1

2

3

TERMINATED

false

위 내용은 Java 스레드 상태 및 일반적인 방법 분석 및 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿