java thread 生命周期_Java多线程(五)线程的生命周期

Java多线程系列更新中~

正式篇:

番外篇(神TM番外篇):

f6f85448a3aa8e572c7ac56ac5eb6790.png

注:大家也需要了解一下英文,因为中文翻译都有偏差

1. 新建(new)

当你创建一个Thread对象时,这个线程就处于新建状态。如:

//这里Multi继承了Runnable接口//如果对此不了解,可以看一下我博客的前面几节class Multi implementsRunnable{public voidrun(){

System.out.println("thread is running...");

}public static voidmain(String args[]){

Multi m1=newMulti();

Thread t1=newThread(m1);

//就到这一行,目前为止的状态是新建(new)

t1.start(); //如果注释掉这行代码,那么程序什么也不会输出,因为还没进入就绪状态(Runnable)

}

}

举个栗子,CPU是一个碧池,她同时谈着多个男朋友(很多线程),但是会轮番陪着不同的男友(执行不同的线程)。你(也是一个线程)想要加入这个大家庭,人多热闹更欢快啊!new状态就是你决定加入这个大家庭但是还没加入。

2.就绪(Runnable)

接着举上面的栗子,Runnable状态是什么呢?就是你成功当上了她众多男友之一,但是那个碧池在陪别人,还没轮到你。

3.运行(Running)

恭喜你,上位了。你的女朋友终于来陪你了。

4.阻塞(Block)

阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪)。简单来说,就是你感冒了,感冒的原因可能有多种(可以有多种方法进入阻塞状态),那个轮番陪男友的碧池就把你跳过去了,直到你感冒好利索为止。

这个状态需要再描述一下,毕竟事关女朋友的占用时间。

Java线程的阻塞及唤醒有如下几种方法。

sleep()方法

这个在上一节已经说过,就是sleep(指定毫秒),当前线程会在你指定的时间内进入阻塞状态,直到时间到了,才进入可执行状态。

suspend()和resume()方法

suspend()使线程进入阻塞状态,只有对应的resume()被调用的时候,线程才重新进入可执行状态。这位由于政治不正确已经被踢出群了。开个玩笑,其实是它会造成死锁,被弃用了,后续我们将会提到锁的概念,这里先mark一下。

wait()方法

在 Java 中可以用 wait、notify 和 notifyAll 来实现线程间的通信。线程在运行的时候,如果发现某些条件没有被满足,可以调用wait方法暂停自己的执行,并且放弃已经获得的锁,然后进入等待状态。当该线程被其他线程唤醒并获得锁后,可以沿着之前暂停的地方继续向后执行,而不是再次从同步代码块开始的地方开始执行。但是需要注意的一点是,对线程等待的条件的判断要使用while而不是if来进行判断。

代码呢?说一堆屁话,代码呢?

客套话:别急,慢慢来,这里先对线程的生命周期有个大概的了解,后面我们会详细介绍。

内心:都写完了那这个系列还写个P啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值