Runable 和线程的生命周期之我见

1.Runable 只是一个接口方法,通常没有生命周期,只要没有对象持有它,就会被Gc回收。
2.Runnable可以单独执行,但是通常不会这样做,因为单独执行,它就是一个普通方法。它被设计的价值,是让Thread或者线程池等
持有它,执行异步方法。
Runable定义干什么,Thread决定哪个线程来干。
Runable本身,既不创建线程,也不调度执行。

为什么Android不推荐直接调用Runnable.run()方法?
1.没有声明调度线程,它默认在主线程(Ui线程执行),如果是耗时操作,必定会ANR。
2.也可以这样做 new Thread(runable).start()
但是,但是,线程创建成本高,维护也高,每次都new Thread,太耗费系统资源。
用完就销毁,无法复用,数量不可能,而且不利于统一管理。
,这是一次性低频任务,不可复用,Android不推荐。

3.为什么推荐线程池?
①线程复用,减少开销
②有任务队列,自动控制并发,可以统一调度
③可以shutdown,控制生命周期。

线程的生命周期:
1.new 线程创建未start
2.RUNable 调用start后,等待CPU调度或者正在执行
3.BLOCK 阻塞 等待取锁(如sychronized)
4.waiting(无限等待) 调用wait(),join(),需要其他线程唤醒。
5.Timed_waiting (计时等待) 调用sleep(时长),超时自动唤醒
6.Terminated(终止) run执行完毕后。

RUNable--》BLOCKED 竞争synchronzied 失败

用一个Thread(runable).start 拉起的方法,如果方法执行结束了,这个Thread跟runable对象,分别是什么状态?
此时两者 都存在(没有被GC回收),但是不再执行,Thread的状态是Terminated。
runable用后即弃,但是它被回收跟线程无关,只跟何时被GC发现有关。

posted @ 2026-05-22 20:28  僧cz0727  阅读(3)  评论(0)    收藏  举报