一.线程状态概述
重点:必须记住6种线程状态的名称
新建(NEW):刚刚创建出来但是没有运行的线程处于此状态。
运行(RUNNABLE):调用start方法启动后的线程处于运行状态。
受阻塞(BLOCKED):等待获取锁的线程处于此状态。
无限等待(WAITING):当线程调用wait()方法时,线程会处于无限等待状态【没有时间的等待】
计时等待(睡眠)(TIMED_WAITING):当线程调用wait(毫秒值)方法或sleep(毫秒值)时,线程会处于计时等待状态【有时间的等待】
退出(死亡)(TERMINATED):当线程执行完了自己的run方法或者调用了stop方法,会进入退出状态。
二.Object类中等待与唤醒的方法
package com.itheima.demo02waitAndnotify;
/*
需求:
使用线程一调用wait方法,进入到无限等待状态
使用线程二调用notify方法,唤醒等待的线程一
*/
public class Demo01 {
public static void main(String[] args) throws InterruptedException {
//定义一个锁对象,供两个线程使用
String lock = "我是一个锁";
//使用线程一调用wait方法,进入到无限等待状态
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("线程一开始执行线程任务了");
//同步代码块
synchronized (lock){
System.out.println("使用线程一调用wait方法,进入到无限等待状态");
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("线程一被线程二唤醒了,会继续执行run方法!");
}
}).start();
//让程序睡眠10秒钟
Thread.sleep(10000);
//使用线程二调用notify方法,唤醒等待的线程一
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("线程二开始执行线程任务了");
//同步代码块
synchronized (lock){
System.out.println("使用线程二调用notify方法,唤醒等待的线程一");
lock.notify();
}
System.out.println("线程二执行线程任务结束了");
}
}).start();
}
}