`

Java中的多线程学习三:线程池

阅读更多
---摘自高人
可以使用线程池对其进行管理,同时线程池还具有提高系统性能的优点,因为创建线程和清除线程的开销比较大。



有两种不同类型的线程池:一是固定线程数量的线程池;二是可变数量的线程池。



对于固定数量的线程池,可以使用Executors的静态方法 newFixedThreadPool 来创建 ExecutorService;或者利用 newSingleThreadPool来创建。



而 ExecutorService 实现了 Executor 接口,这个接口中有一个方法:Execute(Runnable command),也就是执行线程。



对于固定数量的线程池而言,如果需要执行的线程数量多于构造的数量,那么只能并发构造时的数量,剩下的线程就进入线程池的等待队列。



如果不需要使用该线程池了,则使用 ExecutorService 中的 shutDown 方法,此时,该线程池就不会接受执行新的线程任务了。







对于可变数量的线程池,可用Executors的静态方法 newCachedThreadPool 来创建 ExecutorService,该线程池的大小是不定的,当执行任务时,会先选取缓存中的空闲线程来执行,如果没有空闲线程,则创建一个新的线程,而如果空闲线程的空闲状态超过60秒,则线程池删除该线程。





还有一种线程池:延迟线程池



该线程池的创建有两个方法: Executors.newScheduledThreadPool(int corePoolSize);

                                        Executors.newSingleScheduledExecutor();



创建之后,会获得一个 ScheduledExecutorService。



该对象的一个重要的方法就是: schedule(Runnable command, long delay, TimeUnit unit)



该方法返回了一个 ScheduledFuture(下面再讲)。







另外,如果要创建一个自定义的线程池,还可以使用ThreadPoolExecutor这个类,主要的构造方法如下:



ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit,

                                 BlockingQueue<Runnable> wordQueue)



其中各参数的意义:

1.int corePoolSzie: 定义线程池的标准线程数量

2.int maximumPoolSize: 定义线程池的最大线程数量
3.long keepAliveTime: 定义空闲线程的存活时间
4.TimeUnit unit: 存活时间的单位
5.BlockingQueue<Runnable> WordQueue: 线程等待的队列






现在总结一下Callable和Future两个接口



Callable接口和Runnable接口相似,区别就是Callable需要实现call方法,而Runnable需要实现run方法;并且,call方法还可以返回任何对象,无论是什么对象,JVM都会当作Object来处理。但是如果使用了泛型,我们就不用每次都对Object进行转换了。





Future接口,一般都是取回Callable执行的状态用的。其中的主要方法:

•cancel,取消Callable的执行,当Callable还没有完成时
•get,获得Callable的返回值
•isCanceled,判断是否取消了
•isDone,判断是否完成


这上面,就是对线程池的大致总结。
分享到:
评论

相关推荐

    java多线程,对多线程,线程池进行封装,方便使用

    java多线程,对多线程,线程池进行封装,方便使用

    Java中多线程的使用线程池.docx

    * 使用多线程的好处: 1.降低消耗,减少了创建和销毁线程的次数,每个线程都可以重复利用,可执行多个任务 2.提高响应速度,任务可以不需要等到线程创建就可以立即执行 3.提高线程的可管理性,根据系统的承受能力,...

    Java多线程编程总结

    Java 线程系列博文总结word化,编目如下,欢迎互相学习交流: Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:...

    java多线程编程总结

    详细的讲述了多线程的各种用法 Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠...

    Java多线程Executors批量执行数据实现限流

    Java多线程实现数据切割批量执行,实现限流操作。 java线程池Executors实现数据批量操作。 批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。...

    java多线程查询数据库

    java多线程并发查询数据库,使用线程池控制分页,并发查询。

    Java理论与实践:线程池与工作队列

    线程池远不是服务器应用程序内使用多线程的唯一方法。如同上面所提到的,有时,为每个新任务生成一个新线程是十分明智的。然而,如果任务创建过于频繁而任务的平均处理时间过短,那么为每个任务生成一个新线程将会...

    一个通用的Java线程池类

    目标:Java中多线程技术是一个难点,但是也是一个核心技术。因为Java本身就是一个多线程语言。本人目前在给46班讲授Swing的网络编程--使用Swing来模拟真实的QQ实时聊天软件。因为涉及到Socket编程,所以一定会使用多...

    Java多线程编程,生命游戏,用线程池.zip

    Java多线程编程,生命游戏,用线程池.zipJava多线程编程,生命游戏,用线程池.zip Java多线程编程,生命游戏,用线程池.zipJava多线程编程,生命游戏,用线程池.zip Java多线程编程,生命游戏,用线程池.zipJava多...

    JAVA使用线程池查询大批量数据

    JAVA使用线程池查询大批量数据

    Java8并行流中自定义线程池操作示例

    主要介绍了Java8并行流中自定义线程池操作,结合实例形式分析了并行流的相关概念、定义及自定义线程池的相关操作技巧,需要的朋友可以参考下

    计算机后端-Java-Java核心基础-第20章 多线程 20. 创建多线程的方式四:使用线程池.avi

    计算机后端-Java-Java核心基础-第20章 多线程 20. 创建多线程的方式四:使用线程池.avi

    java 断点续传 多线程下载 线程池下载

    多线程下载文件,idea开发工具需要安装 lombok 插件,具体百度下吧, 不过没有也没关系,我这里主要lombok 的set get、log 两个方法,具体自己可以重写 ,只为求分,git地址为https://github.com/ljie/java-downFile

    多线程系列相关的技术要点

    4. Java多线程学习(三)volatile关键字 5. Java多线程学习(四)等待/通知(wait/notify)机制 6. Java多线程学习(五)线程间通信知识点补充 7. Java多线程学习(六)Lock锁的使用 8. Java多线程学习(七)...

    Java 利用多线程实现文件的分片下载

    刚学完多线程和线程池,以及线程爱好者。 使用场景及目标: 大文件的快速下载,经测试在100M带宽的网络下,下载一个40M的文件,不超过两秒钟,当然还得根据自己电脑的配置来讲。 其他说明: 文件如果特别小,而...

    java多线程分页查询

    用于数据量大的情况下预先查询出数据,加快对后面页面数据的查询速度

    java多线程、并发及线程池介绍收藏的几篇文档

    里面是自己收藏的几篇关于线程的文档资料,大家可以看看哈

Global site tag (gtag.js) - Google Analytics