参考这个课程,讲的非常详细
27.线程池使用步骤总结_哔哩哔哩_bilibili
商品秒杀
文件上传
订票系统
构造方法
饱和机制
就是我们的队列饱和后我们该怎么处理
是拒绝这个任务还是啥
核心线程数量和任务队列长度
最大线程数和最大空闲时间
MyTask 是我们的线程类,我们连接了Runnable接口
MyWork是我们的任务执行类,连接Thread接口,里面执行run()方法
线程类和测试类编写
线程池类
提交任务,我们把任务扔到List队列里面
执行任务
测试类
MyTasks提交任务给线程池MythreadPool
用.start()调用MyWorker类里面的run方法
传过去的Runnable类型,是Task任务类,我们用start()调用里面的run()方法
newCachedThreadPool() 创建一个默认的线程池对象,里面的线程可重用,且在第一次使用时才创建
newCachedThreadPool(ThreadFacotry threadfactory)线程池中的所有线程都使用ThreadFacotry来创建,这样的线程无需手动启动,自动执行
newFixThreadPool() 创建一个可重用固定线程数的线程池
newFixThreadPool(ThreadFacotry threadfactory) 创建一个可重用固定线程数的线程池,且线程池中的所有线程都使用ThreadFacotry来创建
newSingleThreadExecutor() 创建一个使用单个worker线程的Executor,以无界队列方式来运行该线程
newSingleThreadExecutor(ThreadFacotry threadfactory)
创建一个使用单个worker线程的Executor,且线程池中的所有线程都使用ThreadFacotry来创建
newCachedThreadPool()获取ExcecutorService并且提交任务
反正就是,要执行的类,要连接Runnable接口,然后把这个连接了Runnable接口的类传给线程池
使用工厂类来创建线程池对象
然后我们的内部是return一个Thread
这里面的形参可以指定我们的线程的名称等等
无限个线程
加多了个指定线程数量
指定了3个线程,所以最多用到3个线程
shutDown,不能再提交新的任务了
shutDownNow
如果我们还有其他需求
例如我们提交后我们想延迟一段时间
或者我们想每次间隔一段时间
允许延时任务和定时任务
我们的延迟任务不用start()了,用schedule(任务,延迟时间,时间的单位)
如果我们用ThreadFactory()工厂创建后
我们用scheduleAtFixRate()来提交任务
scheduleWithFixedDelay()方法执行任务
和上面那种方法的不同,在于时间间隔的不同
任务执行时间不记录到间隔时间之内
任务结束之后才开始计算时间
Single线程池用这个方法调用
submit()方法里面
形参是Callable类型
或者Runnable类型
是有返回值的
有时候我们需要获取线程的计算结果来进行计算
cancel()
get()
isCancelled()
isDone()
submit()的返回值类型是Callable类型
也就是我们的Future类型
然后这个里面有我们的异步计算结果,可以根据它来进行操作
结束后记得关闭线程池