什么是线程池,如何使用,为什么要用

等等,昨天我写代码的时候发生了一些事情。
有一个API请求特别慢,每次都要等半天。
我就想,直接创建一个线程池,把几个请求放在一起,让系统自己调度,省去了我手动创建线程的麻烦,既慢又不稳定。
事实证明,只要使用得当,线程池确实是省心的,尤其是对于短时间、高频的任务。
想想看,一个热门网站有很多用户,没有线程池怎么生存呢?但如果你正在做一个需要长时间交互的任务,比如加载一个大文件,那么使用线程池就不合适了,操作也不会流畅。
所以这个事情要看情况。

android开发中线程有几种状态,分别是哪些?

线程有几种状态

上周有位嘉宾问我,Java中具体的线程生命周期是怎样的?我向他详细解释了这一点。

首先,Java中的线程生命周期可以分为五种状态。
第一个状态是新的。
此时,线程对象已经创建完成,但是start()方法还没有被调用,所以线程还没有处于可执行状态。

第二个状态是可管理的。
线程对象调用start()方法后,就坐在可执行线程池中,等待线程调度程序选择CPU的使用权。

第三个状态是RUNNING。
此时线程已经获得了CPU时间片,正在执行程序代码。

然后是 BLOCKED 状态。
这种状态有点复杂,可以分为三种情况。
第一个是等待块。
线程执行o.wait()方法并被放入等待队列中。
第二种是同步阻塞。
该线程尝试获取已被其他线程占用的同步锁,并放入锁池中。
第三种是另一个块。
例如,当线程执行Thread.sleep(longms)、t.join()方法或发出I/O请求时,它将被设置为阻塞状态。
但当sleep()到期、等待join()的线程终止或超时、或者I/O处理完成时,线程将返回到可运行状态。

最后一种是死亡状态(DEAD)。
这个状态比较简单。
当线程执行完 run() 或 main() 方法或因异常退出 run() 方法时,生命周期结束。
您无法重新启动死线程。

无论如何,Java线程的生命周期是比较复杂的,但是理解这些状态对于开发来说是非常有用的。