自定义线程池类:
要求:封装一个线程集合(池)
相关属性(用于描述线程池当前的状态):最大线程数,空闲线程数,忙碌线程数等;
相关功能:线程的分配与回收(分配与回收会改变当前线程池状态)、获取当前线程池状态、线程池缩减或扩容策略(如连续1分钟,线程池中80%线程处于忙碌状态则扩容,连续1分钟,线程池中80%线程处于空闲状态则缩减,此功能需要启动另一个线程实时检测)
说明:1.启动线程时通过调用start方法实现,获取CPU时间片运行时会自动执行线程的run方法;因此需要线程池中线程(设为线程A)执行任务(设为线程B)时调用A.start()并传递对象B{比如A.dispatch(B);A.start();},在线程A的run方法中调用B.run()执行任务,此时并没有启动线程对象B,B.run()就是一个普通的方法。
2.线程池中的线程A的run()方法应设计为死循环,永不结束,否则正常结束的话线程就消亡了(运行时获取通知/参数,决定是否结束),也失去线程池的作用了。
3.合理设计池中线程A的状态,何时处忙碌(不分配任务),何时处于空闲(分配任务)?当主程序结束时,应该结束池中所有线程。