123,537
社区成员
发帖
与我相关
我的任务
分享
题目:线程有以下6种状态:新建、运行、阻塞、等待、计时等待和终止。
实现:查看线程的运行状态。
new新线程时,线程处于新建 状态。
调用start()方法时,线程处于运行状态。
当线程需要获得对象的内置锁,而该锁正被其他线程拥有,线程处于阻塞状态。
线程等待其他线程通知调度表可以运行时,该线程处于等待状态。
对于一些含有时间参数的方法,如 Thread 类的 sleep()方法,可以使线程处于计时等待状态。
当run()方法运行完毕或出现异常时,线程处于终止状态。
创建一个类:ThreadState,实现Runnable接口
定义3个方法:
waitForASecond():使当前线程等待0.5秒或其他线程调用notify()或notifyAll()方法
waitForYears() :使当前线程永久等待,直到其他线程调用notify()或notifyAll()方法
notifyNow():唤醒由调用wait()方法进入等待状态的线程
使用Thread类的getState()方法,可以获得线程的状态一>该方法的返回值是Tread.State
package basic.example;
/**
* Description: 如何描述该类
*
* @author hongzx
* @date 2022/5/28
* @version 1.0
*
* <pre>
* 修改记录:
* 修改后版本 修改人 修改日期 修改内容
* 2022/5/28 hongzx 2022/5/28 Create
* </pre>
*
*/
public class BasicFor67 {
/**
* 线程类
*/
static 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);//留时间打印
}
@Override
public void run() {
try {
// 在新线程中运行
waitForASecond();
waitForYears();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws InterruptedException {
ThreadState threadState = new ThreadState();
Thread thread = new Thread(threadState);//新建线程
System.out.println("新建线程状态:" + thread.getState());
thread.start();//启动线程
System.out.println("启动后的线程状态:" + thread.getState());
Thread.sleep(100); // 当前线程休眠0.1秒,使新线程运行waitForSecond()方法
System.out.println("计时等待0.1秒状态:" + thread.getState());
Thread.sleep(1000);// 当前线程休眠1秒,使新线程运行waitForYears()方法
System.out.println("计时等待1秒状态:" + thread.getState());
threadState.notifyNow();
System.out.println("线程唤醒后状态:" + thread.getState());
Thread.sleep(1000);
System.out.println("终止线程状态:" + thread.getState());
}
}