1. 为什么使用线程池 诸如 Web 服务器.数据库服务器.文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务.请求以某种方式到达服务器,这种方式可能是通过网络协议(例如 HTTP.FTP 或 POP).通过 JMS 队列或者可能通过轮询数据库.不管请求如何到达,服务器应用程序中经常出现的情况是:单个任务处理的时间很短而请求的数目却是巨大的. 构建服务器应用程序的一个简单模型是:每当一个请求到达就创建一个新线程,然后在新线程中为请求服务.实际上对于原型开发这…
转载:http://blog.csdn.net/kimylrong/article/details/50970493 查询.监控.分析Java应用程序的时候,我们关注的点主要集中在资源利用,比如CPU,内存,IO,线程等.其中内存以及线程的分析尤为常见.内存,是否有内存泄漏,各个区块内存分配是否大小合适.线程,数目是否合理,有没有死锁,运行状态如何. jps -vl jps是JDK提供的一个小工具,上面的命令会把操作系统里面的java应用都展示出来,显示PID,启动类或者JAR,VM参数.可以通…
CommandUtil.java package utils; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; /** * 执行系统命令工具类 * * @author Storm * */ public class CommandUtil { /** * 默认输出字符集,设置成其它字符集中文会乱码 */ private static final String…
线程和进程的基本概念 进程和线程是动态的概念.         进程是 "执行中的程序",是一个动词,而程序是一个名词,进程运行中程序的"代码",而且还有自己的计数器,寄存器,它会向系统申请系统资源.         线程是进程中的一个控制流.一个程序可能可能包含多个任务并发运行,而线程就是指一个任务重头到尾的执行流.         说的在简单点,线程是执行中的任务,一个程序包含多个任务.   多线程        单处理器中,为提高处理器的使用率(最终目标),使…
前言 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,即进程空间或(虚空间).进程不依赖于线程而独立存在,一个进程中可以启动多个线程. 线程是指进程中的一个执行流程,一个进程中可以运行多个线程.线程总是属于某个进程,线程没有自己的虚拟地址空间,与进程内的其他线程一起共享分配给该进程的所有资源,统一进程内的线程共享一个堆内存,每个线程具有自己的栈内存."同时"执行是人的感觉,在线程之间实际上轮换执行. 同步与异步 同步:排队执行,效率低但是安全. 异步:同步执行,效…
Executor框架 Executor类:在java.util.concurrent类中,是JDK并发包的核心类. ThreadPoolExecutor: 线程池. Excutors: 线程池工厂,通过Executor可以创建一个特定功能的线程池. 一).Executor框架的类的关系 Executor, ExecutorService, AbstractExcutorService, ThreadPoolExecutor,Executors Eecutor类: 接口,只有一个execute()…
在 Java 语言中,并发编程都是依靠线程池完成的,而线程池的创建方式又有很多,但从大的分类来说,线程池的创建总共分为两大类:手动方式使用 ThreadPoolExecutor 创建线程池和使用 Executors 执行器自动创建线程池. 那究竟要使用哪种方式来创建线程池呢?我们今天就来详细的聊一聊. 先说结论 在 Java 语言中,一定要使用 ThreadPoolExecutor 手动的方式来创建线程池,因为这种方式可以通过参数来控制最大任务数和拒绝策略,让线程池的执行更加透明和可控,并且可以…
Java创建线程的四种方式 1.继承Thread类创建线程 定义Thread类的子类,并重写该类的run方法,run()方法的内容就是该线程执行的内容 创建Thread子类的实例,即创建了线程对象. 调用线程对象的start()方法来启动该线程. 代码演示 public class MyThread extends Thread { @Override public void run() { // 执行业务逻辑 } public static void main(String[] args) {…
作者:何甜甜在吗 juejin.im/post/5dc41c165188257bad4d9e69 看阿里巴巴开发手册并发编程这块有一条:线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,通过源码分析禁用的原因 写在前面 首先感谢大家在盖楼的间隙阅读本篇文章,通过阅读本篇文章你将了解到: 线程池的定义 Executors创建线程池的几种方式 ThreadPoolExecutor对象 线程池执行任务逻辑和线程池参数的关系 Executors创建返回Thre…
看阿里巴巴开发手册并发编程这块有一条:线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,通过源码分析禁用的原因. 线程池的优点 管理一组工作线程,通过线程池复用线程有以下几点优点: 减少资源创建:减少内存开销,创建线程占用内存 降低系统开销:创建线程需要时间,会延迟处理的请求 提高稳定性:避免无限创建线程引起的OutOfMemoryError Executors创建线程池的方式 根据返回的对象类型创建线程池可以分为三类: 创建返回ThreadPoolE…