Rumah >Java >javaTutorial >Bagaimana untuk menyemak status berjalan benang di Java
Soalan
Benang mempunyai 6 keadaan berikut: baharu, berjalan, disekat, menunggu, menunggu masa dan ditamatkan .
Apabila urutan baharu dibuat, utas berada dalam keadaan baharu dibuat.
Apabila kaedah mula() dipanggil, benang berada dalam keadaan berjalan.
Apabila benang perlu mendapatkan kunci terbina dalam objek, dan kunci itu dimiliki oleh utas lain, benang itu disekat.
Urutan berada dalam keadaan menunggu apabila ia sedang menunggu urutan lain untuk memberitahu penjadual bahawa ia boleh dijalankan.
Untuk beberapa kaedah yang mengandungi parameter masa, seperti kaedah sleep() kelas Thread, utas boleh diletakkan dalam keadaan menunggu masa.
Apabila kaedah run() selesai berjalan atau pengecualian berlaku, benang berada dalam keadaan ditamatkan.
Pelaksanaan: Semak status berjalan pada urutan.
Buat kelas: ThreadState, laksanakan antara muka Runnable
Tentukan 3 kaedah:
waitForASecond (): Jadikan utas semasa menunggu selama 0.5 saat atau utas lain memanggil kaedah notify() atau notifyAll()
waitForYears(): Jadikan utas semasa menunggu selama-lamanya sehingga utas lain memanggil notify() Atau notifyAll() kaedah
notifyNow(): bangunkan benang yang memasuki keadaan menunggu dengan memanggil kaedah wait()
Gunakan kaedah getState of the Thread class () untuk mendapatkan status thread.
Nilai pulangan kaedah ini ialah Tread.State
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(); } } }
Kelas ujian:
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());// 输出线程状态 } }
Atas ialah kandungan terperinci Bagaimana untuk menyemak status berjalan benang di Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!