目录
3.synchronized 关键字 - 监视器锁 monitor lock
2.直接修饰普通⽅法: 锁的 SynchronizedDemo 对象
3.修饰静态⽅法: 锁的 SynchronizedDemo 类的对象
1.线程状态
在Java中,线程有几种不同的状态,可以通过Thread类的getState()方法获取线程的当前状态。
线程的状态是⼀个枚举类型 Thread.State
public class ThreadState {
public static void main(String[] args) {
for (Thread.State state : Thread.State.values()) {
System.out.println(state);
}
}
}
- NEW(新建):新创建的线程尚未启动。
- RUNNABLE(可运行):正在Java虚拟机中执行的线程,可能正在执行,也可能正在等待CPU时间片。
- BLOCKED(阻塞):被阻塞并等待监视器锁定的线程。当线程试图进入一个同步代码块,而该块已经被其他线程持有时,该线程将进入阻塞状态。
- WAITING(等待):无限期等待另一个线程执行特定操作的线程。线程可以通过调用Object类的wait()方法、Thread类的join()方法或LockSupport类的park()方法进入等待状态。
- TIMED_WAITING(计时等待):在等待一段时间后自动恢复运行的线程。线程可以通过调用Thread类的sleep()方法、Object类的wait方法、Thread类的join方法进入计时等待状态。
- TERMINATED(终止):已经执行完毕的线程,不再运行。
示例:
我们用getState()来获取线程的状态。
package 多线程;
public class ThreadDemo13 {
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(()->{
for (int i = 0; i < 5; i++) {
System.out.println("线程运行中");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
//启动之前状态是new状态
System.out.println(t.getState());
t.start();
System.out.println(t.getState());
t.join();
System.out.println(t.getState());
System.out.println("t线程结束");
}
}
我们查看结果一开始线程的状态是NEW,当我们t.start后线程的状态变成了RUNNABLE,之后线程开始运行。我们使用t.join()提前结束线程。线程状态改变成了TERMINTED。