当前位置:网站首页>线程的六种状态
线程的六种状态
2022-08-06 05:23:00 【无奈的码农】
线程的状态
JAVA的6中线程状态:
- NEW : 线程刚刚创建,还没有启动
- RUNNABLE : 可运行状态,由线程调度器可以安排执行。
- 包括READY和RUNNING两种细分状态
- WAITING: 等待被唤醒
- TIMED WAITING: 隔一段时间后自动唤醒
- BLOCKED: 被阻塞,正在等待锁
- TERMINATED: 线程结束
线程状态图
** 线程状态测试代码 **
o.wait() t.join() LockSupport.park() Lock.lock() 这四个方法都是返回waiting状态。
synchronized(o) 返回BLOCKED 状态,看上图所画。
package sc.app.stc.qdm2;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.LockSupport;
/** * @ClassName ThreadStatus * @Description 线程状态 * @Date 2022/8/4 10:35 **/
public class ThreadStatus {
public static void main(String[] args) throws Exception {
MyThread myThread = new MyThread();
System.out.println("刚创建的线程状态为"+myThread.getState());
myThread.start();
System.out.println("启动后的线程状态为"+myThread.getState());
myThread.sleep(1000);
System.out.println("隔断时间后自动唤醒的线程状态为"+myThread.getState());
MyThread2 myThread2 = new MyThread2();
myThread2.start();
TimeUnit.SECONDS.sleep(1);
System.out.println("线程锁住后状态为: " + myThread2.getState());
//放开线程
LockSupport.unpark(myThread2);
TimeUnit.SECONDS.sleep(2);
System.out.println("线程解锁后状态为: " + myThread2.getState());
final Object o = new Object();
Thread myThread3 = new Thread(()->{
synchronized (o) {
System.out.println("t3 得到了锁 o");
}
});
new Thread(()-> {
synchronized (o) {
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
TimeUnit.SECONDS.sleep(1);
myThread3.start();
TimeUnit.SECONDS.sleep(1);
System.out.println("线程同步锁状态为: " + myThread3.getState());
}
static class MyThread2 extends Thread {
@Override
public void run() {
try {
//阻塞线程
LockSupport.park();
System.out.println("t2 go on!");
TimeUnit.SECONDS.sleep(1);
}catch (Exception e){
e.printStackTrace();
}
}
}
static class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println();
}
}
}
边栏推荐
猜你喜欢
随机推荐
Unity优化之GC——合理优化Unity的GC
MiniFlow -- 4.Linear Transform
shell之iptables 防火墙
HAProxy 生产环境架构
4.1 脚本病毒编写实验
Unity3D 重复的使用 AssetBundle.LoadAsset&lt;T&gt;() 同一资源对象,并不会导致性能问题
MongoDB之索引的操作
你懂函数递归吗!五分钟教你玩转shell函数和数组
lvs-dr
vmware设置多端口对应多网卡(桥接模式)
利用Metasploit控制目标电脑(Win7_x64系统)
pip管理软件命令
office运行时错误,部分系统文件可能丢失或已损坏(错误代码:0x80040154)
mysql如何统计周的数据?
Fortinet发布2022年安全趋势预测,威胁将蔓延整个攻击面
C Shap 如何唯一确定一个类,当多个程序集具有相同的全名类时,避免冲突或意外的替换。
Unity.Time 小白科普
Serial USART and UART
selenium简单常见操作(部分WebdriverAPI)
3.3 关于代码植入和定位shellcode的思考