Java并发之ThreadPoolExecutor 线程执行服务
package com.thread.test.thread; import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit; /**
* ThreadPoolExecutor
* 通过线程池执行所提交的任务的ExecutorService,通常由Executors生成
* 执行高并发任务比较高效,因为减少了任务的穿行等待时间,同时很好的管理着执行需求的资源,包括线程,
* 通常,维护者一些基础的任务执行数据,例如已完成任务数量
*
* ThreadPoolExecutor有许多可调正的参数,可以适用于不同的用途,但是通常我们使用
* Executors#newCachedThreadPool 无容量限制,线程自动回收
* Executors#newFixedThreadPool 固定容量线程池
* Executors#newSingleThreadExecutor 单线程
* 等为许多通用场景预置了很多参数,
*
* Hello world!
*
*/
public class ThreadPoolFactoryTest
{
public static void main( String[] args )
{
/**
* @ int corePoolSize:线程池中维护的线程数量,生命周期同线程池,除非设置了allowCoreThreadTimeOut
* @ int maximumPoolSize:允许的最大数量
* @ long keepAliveTime:允许的最大存活时间
* @ TimeUnit unit:单位
* @ BlockingQueue<Runnable> workQueue:存储等待执行任务,execute提交的Runnable类型任务
* @ RejectedExecutionHandler handler:线程阻塞,队列已满时执行的操作
*/
ExecutorService enew = new ThreadPoolExecutor(5, 20, 0L,
TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>(),
new RejectedExecutionHandler() {
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
System.out.println("this is the exception execution begin");
executor.execute(r);
System.out.println("this is the exception execution end");
}
}); for (int i = 0; i < 100; i++) {
enew.execute(new Runnable() {
public void run() {
int l = ThreadLocalRandom.current().nextInt();
System.out.println("task..." + l + "begin");
try {
Thread.sleep(2000);
System.out.println("task..." + l + "end");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
System.out.println("add end...");
}
}
项目地址:https://github.com/windwant/windwant-demo/tree/master/thread-demo
Java并发之ThreadPoolExecutor 线程执行服务的更多相关文章
- Java并发之ThreadPoolExecutor
ThreadPoolExecutor源码分析 简介 java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类,因此如果要透彻地了解Java中的线程池,必 ...
- Java并发之ThreadPoolExecutor源码解析(二)
ThreadPoolExecutor ThreadPoolExecutor是ExecutorService的一种实现,可以用若干已经池化的线程执行被提交的任务.使用线程池可以帮助我们限定和整合程序资源 ...
- Java并发之ThreadPoolExecutor源码解析(三)
Worker 先前,笔者讲解到ThreadPoolExecutor.addWorker(Runnable firstTask, boolean core),在这个方法中工作线程可能创建成功,也可能创建 ...
- java并发:获取线程执行结果(Callable、Future、FutureTask)
初识Callable and Future 在编码时,我们可以通过继承Thread或是实现Runnable接口来创建线程,但是这两种方式都存在一个缺陷:在执行完任务之后无法获取执行结果.如果需要获取执 ...
- Java如何等待子线程执行结束
工作中往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完后再把那段逻辑的处理结果进行汇总的产景, 这时候就需要使用线程了. 一个线程启动之后, 是异步的去执行需要执行的内容的, 不会影响主线 ...
- Java并发之(2):线程通信wait/notify(TIJ_21_5)
简介: java中线程间同步的最基本的方式就是使用wait()¬ify()¬ifyAll(),它们是线程间的握手机制.除了上述方法,java5还在java.util.con ...
- Java之CountDownLatch ---控制线程执行顺序
一,类介绍 这是java.util.concurrent包里的一个同步辅助类,它有两个主要的常用方法 countDown()方法以及await()方法.在完成一组正在其他线程中执行的操作之前,它允许 ...
- java并发之停止线程
停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作.停止一个线程可以用Thread.stop()方法,但最好不要用它.虽然它确实可以停止一个正在运行的线程,但是这个方法是不安 ...
- Java编程的逻辑 (77) - 异步任务执行服务
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
随机推荐
- Ado.net 三[SQL注入,DataAdapter,sqlParameter,DataSet]
1.SQL注入:SQL注入攻击是web应用程序的一种安全漏洞,可以将不安全的数据提交给运用程序,使应用程序在服务器上执行不安全的sql命令.使用该攻击可以轻松的登录运用程序. 例如:该管理员账号密码为 ...
- [函數] Firemonkey 各平台 "简体" / "繁体" 判断
目前的 Delphi 10 Seattle 的 TLang 尚不支持取得简体及繁体的语系字符,在能取得正确的语系字符后(整理中),才能使用下列函数判断: function ChineseLang(co ...
- Facebook的Hack语言三大看点
Hack语言主要有三大看点:类型化.异步.集合. Hack最基础的特性就是类型标注.PHP5已经开始支持对象的类型化,PHP7也提供了标量类型化声明.Hack提供了全面的类型标注支持,与其typech ...
- ErrorExecution failed for task 'apptransformClassesWithDexForDebug'
[原因]: 在工程中既有本地的lib.jar文件,又有compile链接.
- 使用loadrunner进行压力测试之----post请求
1. 发送post请求时使用web_submit_data 如: web_submit_data("create",//事务名 "Action=http://bizhi. ...
- 六个创建模式之原型模式(Prototype Pattern)
定义: 使用原型实例指定创建对象的种类,并通过拷贝这个原型的属性创建新的对象. 结构图: Prototype:抽象原型类,声明克隆方法的接口,并是所有原型类的公共父类.在Java中,Object类为该 ...
- Eclipse的SVN插件提示:验证验证位置时发生错误:"Unable to load default SVN Client“解决
这个原因是你的机器上没有 JAVAHL 这个包, 这个是另外的一个开源组件, 所以, 在trigis的svn插件发行版里面没有这个东西,下载装上就是, 这个包在不同的系统上, 有不同的情况...详情见 ...
- CSS盒子模型
2016-10-22 <css入门经典>第6章 1.每个HTML元素对应于一个显示盒子,但不是所有的元素都显示在屏幕上. 2.HTML元素显示为CSS显示盒子的真正方法称为"可视 ...
- reactjs学习一(环境搭配react+es6+webpack热部署)
reactjs学习一(环境搭配react+es6+webpack热部署) 本文的源码在这里下载 https://github.com/tianxiangbing/webpack-study 或者使 ...
- ABAP--在查询条件只包含部分索引字段时,如何使用索引
One of the most important considerations when writing a select statement against a large table is th ...