10
七、实现支持异步任务的线程池
线程池:线程池是存放多个线程的容器,CPU调度线程执行后不会销毁线程,将线程放回线程池重新利用。
使用线程池的原因:
线程是稀缺资源 ,不应该频繁创建和销毁;
架构解耦,业务创建和业务处理解耦,更加优雅;
线程池是使用线程的最佳实践。
实现线程安全的队列Queue
队列:用于存放多个元素,是存放各种元素的“池”。
实现的基本功能:获取当前队列元素数量,往队列放入元素,往队列取出元素。
注意:队列可能有多个线程同时操作,因此需要保证线程安全,如下两种情况:
实现基本任务对象Task
实现的基本功能:任务参数,任务唯一标记(UUID),任务具体的执行逻辑
实现任务处理线程ProcessThread:任务处理线程需要不断地从任务队列里取任务执行,任务处理线程需要有一个标记,标记线程什么时候应该停止。
实现的基本功能:基本属性(任务队列、标记),线程执行的逻辑(run),线程停止(stop)。
实现任务处理线程池Pool:存放多个任务处理线程,负责多个线程的启停,管理向线程池的提交任务,下发给线程去执行。
实现的基本过程:基本属性,提交任务(put,batch_put),线程启停(start,join),线程池大小(size)。
实现异步任务处理AsyncTask:给任务添加一个标记,任务完成后,则标记为完成;任务完成时可直接获取任务运行结果;任务未完成时,获取任务结果,会阻塞获取线程。
主要实现的两个函数:设置运行结果(set_result),获取运行结果(get_result)