題目
執行緒有以下6種狀態:新建、執行、阻斷、等待、計時等待、終止。
new新執行緒時,執行緒處於新建 狀態。
呼叫start()方法時,執行緒處於運行狀態。
當執行緒需要取得物件的內建鎖,而該鎖正被其他執行緒擁有,執行緒處於阻塞狀態。
執行緒等待其他執行緒通知調度表可以執行時,該執行緒處於等待狀態。
對於一些含有時間參數的方法,如 Thread 類別的 sleep()方法,可以讓執行緒處於計時等待狀態。
當run()方法運行完畢或出現異常時,執行緒處於終止狀態。
實作:查看執行緒的運行狀態。
建立一個類別:ThreadState,實作Runnable介面
定義3個方法:
waitForASecond ():使目前執行緒等待0.5秒或其他執行緒呼叫notify()或notifyAll()方法
#waitForYears() :使目前執行緒永久等待,直到其他執行緒呼叫notify()或notifyAll()方法
notifyNow():喚醒由呼叫wait()方法進入等待狀態的執行緒
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怎麼查看執行緒運行狀態的詳細內容。更多資訊請關注PHP中文網其他相關文章!