关于概念什么的我也是看别人的blog:
http://blog.csdn.net/xiaoxiaohacker/article/details/17525799
http://blog.csdn.net/jeffhtlee/article/details/7851120
http://blog.csdn.net/XSL1990/article/details/18564097
贴上自己的demo:
线程池:
package com.yea.test.thread; import org.apache.log4j.Logger; import java.util.concurrent.*; /** * User: Circo * Date: 1/16/14 * Time: 9:10 PM */ public class TestThreadPool { public final Logger logger = Logger.getLogger(TestThreadPool.class); /** * 线程池之外的缓冲队列 */ private LinkedBlockingQueue<Runnable> taskList = new LinkedBlockingQueue<Runnable>(); /** * 线程池的策略(当池中和缓冲队列中的任务满了时的动作--加入池外的缓冲队列) * 对于加入池外队列的任务,线程池不会自动加载运行,需要[定时器]的帮助 */ private RejectedExecutionHandler handler = new RejectedExecutionHandler() { @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { try { logger.debug("taskList add " + r.toString()); taskList.put(r); logger.debug("taskList size=" + taskList.size()); } catch (InterruptedException e) { e.printStackTrace(); } } }; /** * 线程池 执行线程最少为 3,最多为 4,存活时间为 3,单位 秒,缓冲队列为2,策略为自定义 */ private ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 4, 3, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(2), handler ); /** * 定时器 定时执行某个任务 * 这里执行任务:scheduledThread */ private ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1); /** * 定时器的任务 * 任务为:定时把线程池外的任务拿给线程池去执行 */ private Runnable scheduledThread = new Runnable() { @Override public void run() { Runnable runnable = taskList.poll(); logger.debug("remove task " + runnable.toString() + "from taskList"); threadPoolExecutor.execute(runnable); } }; private void execute() { //产生15个线程,加入线程池 for (int i = 0; i < 10; i++) { try { String task = "task@" + i; logger.debug("add " + task + " to ThreadPool"); threadPoolExecutor.execute(new Task(task)); //休息0.2秒 便于观察 Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } } //执行定时器任务 //表示:1秒之后运行,每隔2秒执行一次scheduledThread任务 scheduledExecutorService.scheduleAtFixedRate(scheduledThread, 1, 3, TimeUnit.SECONDS); } public static void main(String[] args) { //开始执行 new TestThreadPool().execute(); } }
任务:
package com.yea.test.thread; import org.apache.log4j.Logger; /** * User: Circo * Date: 1/16/14 * Time: 9:42 PM */ public class Task extends Thread{ private static final Logger logger = Logger.getLogger(Task.class); public Task(String name) { this.setName(name); } public void run() { try { logger.debug("线程-- " + this.getName() + " --开始~"); //随机数0-19 如果等于5就退出循环 结束线程 while (5 != (int) (Math.random() * 20)) { //睡眠三秒==处理任务 Thread.sleep(2000); } logger.debug("线程-- " + this.getName() + " --结束。"); } catch (InterruptedException e) { e.printStackTrace(); } } }
运行结果分析:
相关推荐
举个简单的例子: 假如有一个工厂,工厂里面有10个工人,每个工人同时只能做一件任务。 因此只要当10个工人中有工人是空闲的,来了任务就分配给空闲的工人做; 当10个工人都有任务在做时,如果还来了任务,...
消费者对于KafkaConsumer而言,它不是线程安全的,所以实现多线程时通常由两种实现方法:每个线程维护一个KafkaConsumer维护一个或多个KafkaConsumer,并用一个任务线程池处理任务优缺点分析:方法一:实现简单(即...
(企业增值税数据分析系统, 放弃维护) Demo 级别 (sonar例子) (Spring线程池异步任务) (注解缓存框架) (阿里数据源Druid整合) (Dubbo的简单使用) (常用的文件下载实例, word、excel、pdf) (简单的国际化实现) ...
1.8.1 简单语句 1.8.2 复合语句 1.9 空格与空行的应用规则 1.9.1 空格的应用规则 1.9.2 空行的应用规则 1.10 方法、变量与常量的命名规则 1.10.1 方法的命名规则 . 1.10.2 变量的命名规则 1.10.3 常量的命名规则 ...
高并发编程第三阶段11讲 AtomicXXXFieldUpdater源码分析及使用场景分析.mp4 高并发编程第三阶段12讲 sun.misc.Unsafe介绍以及几种Counter方案性能对比.mp4 高并发编程第三阶段13讲 一个JNI程序的编写,通过...
高并发编程第三阶段11讲 AtomicXXXFieldUpdater源码分析及使用场景分析.mp4 高并发编程第三阶段12讲 sun.misc.Unsafe介绍以及几种Counter方案性能对比.mp4 高并发编程第三阶段13讲 一个JNI程序的编写,通过...
3.7.4 令人困扰的例子 37 3.8 赋值运算 37 3.8.1 普通赋值运算 37 3.8.2 运算赋值运算 38 3.9 括号及运算符间的优先级关系 38 3.10 常用数学工具包——java.lang.Math类 39 3.10.1 数学常量 39 3.10.2...
2、应用分析与总体设计(用例,对象分析) 67 3、整体设计完成后进行详细设计 67 4、应用集成 68 二、开发规范 68 1、命名原则 68 2、界面显示 68 3、接口 68 第十部分、Ofbiz基础应用说明 69 一、介绍 69 二、主要...
内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 ...
内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 ...
内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 ...
内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 ...
内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 ...
内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 ...
实例32 优良及差 47 实例33 打印任意一年日历 48 实例34 一年四季的划分 51 第2篇 Java数据处理 第4章 异常处理(教学视频:62分钟) 54 4.1 编译时异常 54 实例35 除0发生的算术异常...
实例255 一个关于泛型的简单例子 511 实例256 带两个类型参数的泛型 513 实例257 有界类型程序示例 514 实例258 通配符使用示例 515 实例259 泛型方法使用示例 516 实例260 泛型接口示例 518 实例261 泛型实现坐标...
实例32 优良及差 47 实例33 打印任意一年日历 48 实例34 一年四季的划分 51 第2篇 Java数据处理 第4章 异常处理(教学视频:62分钟) 54 4.1 编译时异常 54 实例35 除0发生的算术异常...
实例255 一个关于泛型的简单例子 511 实例256 带两个类型参数的泛型 513 实例257 有界类型程序示例 514 实例258 通配符使用示例 515 实例259 泛型方法使用示例 516 实例260 泛型接口示例 518 实例261 泛型实现坐标...
1.2 Java的竞争对手及各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6 1.3.2 Java程序的运行机制和JVM 6 1.4 开发...