线程与线程池
线程和进程的区别?
进程里包含了线程。
进程是一个程序的执行过程,操作系统用来分配资源的;线程 它是最小的执行单位;
前者用来分配资源 后者则强调执行。
线程池中提交一个任务的流程是怎样的?
1.初始化线程池:设置核心线程数、最大线程数、任务队列等参数。
2.提交任务:用户通过 submit()
或 execute()
方法提交任务。
3.任务分配:
-
如果有空闲线程,任务会被分配给空闲线程执行。
-
如果没有空闲线程且队列未满,任务会被放入队列等待。
-
如果队列已满且线程数小于最大线程数,线程池会创建新线程来处理任务。
-
如果队列已满且线程数已达到最大线程数,线程池会根据拒绝策略处理新任务。
4.任务执行:线程从任务队列中取出任务并执行。
5.线程复用:线程执行完任务后,返回线程池等待新任务。
6.关闭线程池:通过 shutdown()
或 shutdownNow()
方法关闭线程池。
-
shutdown():
等待已提交任务完成 -
shutdownNow()
:立即中断所有线程,返回未执行的任务列表。