> Java > java지도 시간 > 본문

Java에서 스레드 실행 상태를 확인하는 방법

WBOY
풀어 주다: 2023-05-03 22:31:05
앞으로
2955명이 탐색했습니다.

1. 스레드의 실행 상태를 확인하세요

Question

스레드에는 신규, 실행 중, 차단됨, 대기 중, 시간 제한 대기 및 종료됨의 6가지 상태가 있습니다.

새 스레드가 생성되면 해당 스레드는 새로 생성된 상태가 됩니다.

start() 메서드가 호출되면 스레드는 실행 상태가 됩니다.

스레드가 객체의 내장 잠금을 획득해야 하고 다른 스레드가 잠금을 소유하고 있는 경우 스레드가 차단됩니다.

스레드는 다른 스레드가 스케줄러에 실행할 수 있음을 알리기를 기다리는 대기 상태입니다.

Thread 클래스의 sleep() 메서드와 같이 시간 매개변수가 포함된 일부 메서드의 경우 스레드가 타이밍 대기 상태에 놓일 수 있습니다.

run() 메서드의 실행이 완료되거나 예외가 발생하면 스레드는 종료된 상태가 됩니다.

구현: 스레드의 실행 상태를 봅니다.

2. 문제 해결 아이디어

클래스 만들기: ThreadState, Runnable 인터페이스 구현

3가지 메서드 정의:

  • waitForASecond(): 현재 스레드를 0.5초 동안 기다리게 하거나 다른 스레드가 inform()을 호출하도록 합니다. informAll() 메서드

  • waitForYears(): 다른 스레드가 inform() 또는 informAll() 메서드를 호출할 때까지 현재 스레드를 영원히 기다리게 합니다.

  • notifyNow(): 다음을 호출하여 대기 상태에 들어간 스레드를 깨웁니다. the wait() 메소드

스레드의 상태를 얻으려면 Thread 클래스의 getState() 메소드를 사용하세요.

이 메소드의 반환 값은 Tread.State

3입니다. 자세한 코드 설명

package com.xiaoxuzhu;

/**
 * Description: 
 *
 * @author xiaoxuzhu
 * @version 1.0
 *
 * <pre class="brush:php;toolbar:false">
 * 修改记录:
 * 修改后版本	        修改人		修改日期			修改内容
 * 2022/5/10.1	    xiaoxuzhu		2022/5/10		    Create
 * 
로그인 후 복사
* @date 2022/5/10 */ public class ThreadState implements Runnable { public synchronized void waitForASecond() throws InterruptedException { wait(500); // 使当前线程等待0.5秒或其他线程调用notify()或notifyAll()方法 } public synchronized void waitForYears() throws InterruptedException { wait(); // 使当前线程永久等待,直到其他线程调用notify()或notifyAll()方法 } public synchronized void notifyNow() throws InterruptedException { notify(); // 唤醒由调用wait()方法进入等待状态的线程 Thread.sleep(100);//留时间打印 } public void run() { try { waitForASecond(); // 在新线程中运行waitForASecond()方法 waitForYears(); // 在新线程中运行waitForYears()方法 } catch (InterruptedException e) { e.printStackTrace(); } } }

테스트 클래스:

package com.xiaoxuzhu;

/**
 * Description:
 *
 * @author xiaoxuzhu
 * @version 1.0
 *
 * <pre class="brush:php;toolbar:false">
 * 修改记录:
 * 修改后版本	        修改人		修改日期			修改内容
 * 2022/5/10.1	    xiaoxuzhu		2022/5/10		    Create
 * 
로그인 후 복사
* @date 2022/5/10 */ public class Test { public static void main(String[] args) throws InterruptedException { ThreadState state = new ThreadState();// 创建State对象 Thread thread = new Thread(state);// 利用State对象创建Thread对象 System.out.println("新建线程:" + thread.getState());// 输出线程状态 thread.start(); // 调用thread对象的start()方法,启动新线程 System.out.println("启动线程:" + thread.getState());// 输出线程状态 Thread.sleep(100); // 当前线程休眠0.1秒,使新线程运行waitForASecond()方法 System.out.println("计时等待:" + thread.getState());// 输出线程状态 Thread.sleep(1000); // 当前线程休眠1秒,使新线程运行waitForYears()方法 System.out.println("等待线程:" + thread.getState());// 输出线程状态 state.notifyNow(); // 调用state的notifyNow()方法 System.out.println("唤醒线程:" + thread.getState());// 输出线程状态 Thread.sleep(1000); // 当前线程休眠1秒,使新线程结束 System.out.println("终止线程:" + thread.getState());// 输出线程状态 } }

Java에서 스레드 실행 상태를 확인하는 방법

위 내용은 Java에서 스레드 실행 상태를 확인하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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