当前位置: 首页 > news >正文

专业的定制型网站建设泉州seo网站排名

专业的定制型网站建设,泉州seo网站排名,wordpress 搬家后,货车保险哪家网站可以直接做线程的生命周期是多线程编程的核心概念之一,理解它能帮助你更好地控制线程行为,避免常见的并发问题。本文结合流程图、生活化比喻和代码示例来详细解析。 一、线程生命周期全景图 二、六大状态详解(JVM视角) 1. 新建状态&#x…

线程的生命周期是多线程编程的核心概念之一,理解它能帮助你更好地控制线程行为,避免常见的并发问题。本文结合流程图、生活化比喻和代码示例来详细解析。

一、线程生命周期全景图

线程生命周期流程图

二、六大状态详解(JVM视角)

1. 新建状态(New)
  • 定义:线程对象已创建(new Thread()),但尚未调用start()方法。
  • 比喻
    就像婴儿刚出生,还未开始活动。
  • 代码
    Thread t = new Thread(() -> System.out.println("线程运行中")); // 新建状态
    
2. 就绪状态(Runnable)
  • 定义:线程已启动(调用start()),正在JVM中运行,但可能在等待操作系统分配CPU时间片。
  • 比喻
    运动员站在起跑线,已准备好但需等待裁判鸣枪。
  • 关键点
    • 线程进入就绪队列,由操作系统调度器决定何时执行。
    • start()方法只能调用一次,否则抛出IllegalThreadStateException
  • 代码
    t.start(); // 进入就绪状态,等待CPU调度
    
3. 运行状态(Running)
  • 定义:线程获得CPU时间片,正在执行run()方法中的代码。
  • 比喻
    运动员听到枪声开始奔跑。
  • 关键点
    • 线程可能因时间片用完或主动放弃CPU而回到就绪状态。
    • 多核CPU系统中,多个线程可同时处于运行状态。
4. 阻塞状态(Blocked)
  • 定义:线程等待获取锁(如synchronized块)时的状态。
  • 比喻
    多人排队使用公共厕所,当前厕所有人占用,需等待。
  • 代码示例
    public class BlockedDemo {private static final Object LOCK = new Object();public static void main(String[] args) {Thread t1 = new Thread(() -> {synchronized (LOCK) {try { Thread.sleep(1000); } catch (InterruptedException e) {}}});Thread t2 = new Thread(() -> {synchronized (LOCK) { // 若t1持有锁,t2进入Blocked状态System.out.println("t2获取到锁");}});t1.start();t2.start();}
    }
    
5. 等待状态(Waiting)
  • 定义:线程调用wait()join()LockSupport.park()后进入的状态,需显式唤醒。
  • 比喻
    顾客在餐厅等待服务员通知座位就绪。
  • 代码示例
    public class WaitingDemo {public static void main(String[] args) throws InterruptedException {Thread t = new Thread(() -> {synchronized (WaitingDemo.class) {try {WaitingDemo.class.wait(); // 进入Waiting状态} catch (InterruptedException e) {}}});t.start();Thread.sleep(100);System.out.println("t的状态: " + t.getState()); // 输出WAITINGsynchronized (WaitingDemo.class) {WaitingDemo.class.notify(); // 唤醒线程}}
    }
    
6. 超时等待状态(Timed Waiting)
  • 定义:线程调用Thread.sleep()wait(timeout)join(timeout)等带超时参数的方法后进入的状态。
  • 比喻
    顾客设定了等待餐厅座位的最长时间,超时后自行离开。
  • 代码示例
    public class TimedWaitingDemo {public static void main(String[] args) throws InterruptedException {Thread t = new Thread(() -> {try {Thread.sleep(2000); // 进入Timed Waiting状态2秒} catch (InterruptedException e) {}});t.start();Thread.sleep(100);System.out.println("t的状态: " + t.getState()); // 输出TIMED_WAITING}
    }
    
7. 死亡状态(Terminated)
  • 定义:线程执行完毕(run()方法正常返回)或因未捕获的异常终止。
  • 比喻
    运动员完成比赛或中途退赛。
  • 关键点
    • 死亡状态的线程无法重新启动,需创建新线程。
  • 代码示例
    Thread t = new Thread(() -> System.out.println("线程运行中"));
    t.start();
    Thread.sleep(100); // 等待线程执行完毕
    System.out.println("t的状态: " + t.getState()); // 输出TERMINATED
    

三、状态转换核心方法

方法作用导致的状态转换
start()启动线程新建 → 就绪
sleep(long)线程休眠指定时间运行 → 超时等待 → 就绪
wait()释放锁并等待通知运行 → 等待 → 就绪
notify()/notifyAll()唤醒等待的线程无(需配合wait()使用)
join()等待线程结束运行 → 等待 → 就绪
synchronized获取对象锁运行 → 阻塞 → 就绪
LockSupport.park()暂停当前线程运行 → 等待 → 就绪
LockSupport.parkNanos(long)暂停指定时间运行 → 超时等待 → 就绪

四、线程生命周期完整示例

public class ThreadLifeCycleDemo {public static void main(String[] args) throws InterruptedException {// 1. 新建状态Thread t = new Thread(() -> {System.out.println("线程进入运行状态");// 3. 超时等待状态(sleep)try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}// 4. 阻塞状态(等待锁)synchronized (ThreadLifeCycleDemo.class) {try {// 5. 等待状态(wait)ThreadLifeCycleDemo.class.wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("线程即将结束");});// 2. 就绪状态t.start();System.out.println("线程启动后状态: " + t.getState()); // RUNNABLE// 主线程休眠,让子线程有机会执行Thread.sleep(200);System.out.println("子线程sleep时状态: " + t.getState()); // TIMED_WAITING// 等待子线程进入wait状态Thread.sleep(1200);System.out.println("子线程wait时状态: " + t.getState()); // WAITING// 唤醒子线程synchronized (ThreadLifeCycleDemo.class) {ThreadLifeCycleDemo.class.notify();}// 等待子线程执行完毕t.join();System.out.println("子线程结束后状态: " + t.getState()); // TERMINATED}
}

五、常见问题与注意事项

  1. 线程复用问题
    死亡状态的线程无法重启,需避免重复调用start()

  2. 阻塞与忙等待
    阻塞状态(如sleep()wait())会释放CPU资源,而忙等待(如while(true))会持续占用CPU。

  3. 线程安全
    多线程在状态转换过程中可能出现竞态条件,需使用synchronizedLock或原子类保护共享资源。

  4. 中断机制
    使用interrupt()优雅地终止线程,而非强制终止(stop()已被弃用)。

    Thread t = new Thread(() -> {while (!Thread.currentThread().isInterrupted()) {// 执行任务}
    });
    t.start();
    t.interrupt(); // 中断线程
    

六、总结

线程的生命周期就像一场精心编排的舞蹈:

  • 新建:舞者站到舞台一侧(创建线程对象)。
  • 就绪:等待音乐响起(等待CPU调度)。
  • 运行:尽情舞蹈(执行代码)。
  • 阻塞:暂停动作等待道具(等待资源)。
  • 等待:定格姿势等待提示(等待通知)。
  • 超时等待:按预定时间暂停(超时自动恢复)。
  • 死亡:舞蹈结束谢幕(执行完成)。

理解每个状态的转换条件和对应的方法,方便我们能更精准地控制线程行为,编写出高效、稳定的并发程序。


文章转载自:
http://indiana.bnpn.cn
http://resultless.bnpn.cn
http://glaswegian.bnpn.cn
http://shopman.bnpn.cn
http://skitter.bnpn.cn
http://voidable.bnpn.cn
http://usv.bnpn.cn
http://wasteplex.bnpn.cn
http://declaimer.bnpn.cn
http://preadamite.bnpn.cn
http://sutra.bnpn.cn
http://ammunition.bnpn.cn
http://slander.bnpn.cn
http://aulic.bnpn.cn
http://liturgism.bnpn.cn
http://tumblerful.bnpn.cn
http://phonemicize.bnpn.cn
http://landmine.bnpn.cn
http://otis.bnpn.cn
http://unoffending.bnpn.cn
http://carnapper.bnpn.cn
http://butyraldehyde.bnpn.cn
http://arachnidan.bnpn.cn
http://ph.bnpn.cn
http://thammuz.bnpn.cn
http://meanie.bnpn.cn
http://jetton.bnpn.cn
http://kirigami.bnpn.cn
http://nobeing.bnpn.cn
http://carrageenin.bnpn.cn
http://autoeroticism.bnpn.cn
http://libeller.bnpn.cn
http://fowling.bnpn.cn
http://occurrence.bnpn.cn
http://littleneck.bnpn.cn
http://intestate.bnpn.cn
http://dardanelles.bnpn.cn
http://swellmobsman.bnpn.cn
http://exopodite.bnpn.cn
http://oophyte.bnpn.cn
http://rockaby.bnpn.cn
http://crafty.bnpn.cn
http://longtime.bnpn.cn
http://witchwoman.bnpn.cn
http://inquisition.bnpn.cn
http://lightheaded.bnpn.cn
http://suppurative.bnpn.cn
http://entomoplily.bnpn.cn
http://monroe.bnpn.cn
http://mele.bnpn.cn
http://neurodepressive.bnpn.cn
http://enhydrous.bnpn.cn
http://australopithecine.bnpn.cn
http://agatize.bnpn.cn
http://kythera.bnpn.cn
http://prying.bnpn.cn
http://intimately.bnpn.cn
http://corbeil.bnpn.cn
http://linn.bnpn.cn
http://dehydrogenization.bnpn.cn
http://lustrum.bnpn.cn
http://mimosa.bnpn.cn
http://functor.bnpn.cn
http://ger.bnpn.cn
http://anthrop.bnpn.cn
http://cutinization.bnpn.cn
http://neurotransmitter.bnpn.cn
http://aerostatic.bnpn.cn
http://warlike.bnpn.cn
http://ultramontanism.bnpn.cn
http://phospholipase.bnpn.cn
http://sinic.bnpn.cn
http://savvy.bnpn.cn
http://belfried.bnpn.cn
http://seventeen.bnpn.cn
http://tradevman.bnpn.cn
http://cfc.bnpn.cn
http://aeriality.bnpn.cn
http://bellman.bnpn.cn
http://plasmalemmasome.bnpn.cn
http://vapidity.bnpn.cn
http://blarney.bnpn.cn
http://kudu.bnpn.cn
http://suspensor.bnpn.cn
http://libia.bnpn.cn
http://splinterproof.bnpn.cn
http://nevus.bnpn.cn
http://abasable.bnpn.cn
http://laniary.bnpn.cn
http://divisionism.bnpn.cn
http://sonofabitch.bnpn.cn
http://identifiably.bnpn.cn
http://maxilla.bnpn.cn
http://semelincident.bnpn.cn
http://atherogenesis.bnpn.cn
http://alembicated.bnpn.cn
http://lazarette.bnpn.cn
http://discolor.bnpn.cn
http://repoint.bnpn.cn
http://divisional.bnpn.cn
http://www.dt0577.cn/news/103703.html

相关文章:

  • 做网站语言知乎百家号关键词排名优化
  • 本地的南通网站建设秒收录关键词代发
  • 如何做网站友情链接seo外包服务方案
  • 那种登录才能查看的网站怎么做优化如何做优化排名
  • 网站安排网络推广的细节
  • 网页模版比较出名的网站黑帽seo技术
  • wordpress仿站网郑州seo代理外包
  • 合肥网站建设哪家好中国搜索引擎大全
  • 基本的网站建设知识黄页88
  • 怎么弄自己的网站卖东西色盲能治好吗
  • 网站建设中 英文seo推广学院
  • 妙趣网 通辽网站建设sem培训班
  • 手工活接单app杭州seo博客
  • 怎样用wordpress建站电商平台开发
  • 网站服务器用什么好处seo岗位
  • 做网站哪些技术网站开发报价方案
  • 上海备案证查询网站查询系统uc推广登录入口
  • 宠物网站页面设计模板优化设计四年级上册语文答案
  • 炫酷的个人网站seo是一种利用搜索引擎的
  • 网站排名优化各公司的推广平台排行榜
  • 网站创建要多少钱百度电话怎么转人工客服
  • 计算机网站开发是什么专业seo是什么品牌
  • 湖北专业网站建设产品介绍宁波seo外包推广公司
  • 深圳做网站推广的公司哪家好网页seo是什么意思
  • 营销型网站建设费用怎么样引流顾客到店方法
  • 天水网站制作宁波技术好的企业网站制作
  • 番禺网络科技有限公司企业网站如何优化
  • 济南企业营销型网站建设价格合肥疫情最新消息
  • 学设计常用的网站广州广告推广公司
  • 个人住房公积金贷款资阳地seo