关于概念什么的我也是看别人的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(); } } }
运行结果分析:
相关推荐
通过分析这个小例子,我们可以学习如何在Qt应用程序中有效地使用线程池,理解多线程编程的基本概念,以及如何优化并发任务的执行。这对于开发大型、复杂的Qt应用,尤其是那些需要大量后台处理的工作,是非常有价值的...
通过查看和分析这个源代码,我们可以学习到线程池的具体实现细节,如如何创建线程、如何管理任务队列、如何调度任务以及如何控制线程池的生命周期。这有助于我们深入理解线程池的工作原理,从而更好地在实际项目中...
这个“C++简单线程池例子”提供了实现线程池的一个实例,通过分析`TestMyThreadPool.cpp`文件,我们可以学习如何设计和使用线程池。 1. **线程池概念**:线程池是由一组预先创建的线程组成的,这些线程等待接收任务...
举个简单的例子: 假如有一个工厂,工厂里面有10个工人,每个工人同时只能做一件任务。 因此只要当10个工人中有工人是空闲的,来了任务就分配给空闲的工人做; 当10个工人都有任务在做时,如果还来了任务,...
Java8并行流中自定义线程池操作示例主要介绍了Java8并行流中自定义线程池操作,结合实例形式分析了并行流的相关概念、定义及自定义线程池的相关操作技巧。 1. 概览 Java8引入了流的概念,流是作为一种对数据执行...
通过分析和理解这些源代码,开发者可以深入理解线程池的工作原理,学习如何在实际项目中高效地利用线程池,提高程序的性能和响应性。同时,对于跨语言的理解,例如从易语言到C++,也可以提升编程能力。
下面展示了一个简单的通用线程池的实现例子: 1. **任务节点定义** - `taskNode` 结构体用于封装待处理的任务数据,如网络连接的句柄 `sockfd`。 2. **任务处理函数** - `printsd` 函数是一个示例性的任务处理...
本资源提供的线程池实现是一个简单而实用的例子,特别适合对C++多线程编程感兴趣或需要在Linux环境中应用线程池技术的开发者。 首先,C++11标准引入了线程库 `<thread>`,使得在C++中进行多线程编程变得更为便捷。...
通过分析这些代码,我们可以学习到如何在易语言中有效地使用多线程,如何设计和实现线程池,以及如何根据具体需求选择合适的线程池实现。 总的来说,易语言的多线程写法,尤其是精易模块线程池和鱼刺模块线程池,为...
一个简单的线程池可能包含以下几个关键部分: 1. **线程类**:这是线程池中的基本元素,用于执行具体的任务。线程类应包括启动、停止、获取状态等功能,同时需要实现线程的同步和通信机制,如使用条件变量或互斥量...
通过阅读和分析源代码,你可以更深入地了解IOCP的工作原理和如何在实际项目中应用。 总结来说,IOCP服务器程序通过异步I/O和线程池机制实现了高效的并发处理能力。这个例子是学习Windows系统级编程,特别是网络服务...
J2ME可能不支持复杂的对象序列化,所以我们可能需要自定义简单的数据格式,如XML或JSON,来传递聊天消息。在发送和接收数据时,我们需要使用DataInputStream和DataOutputStream进行字节流的读写操作。 安全性是任何...
15. **多线程与线程池**:源码可能包含线程池的使用,以提高多任务执行效率。 以上只是部分可能涵盖的知识点,具体的学习内容将取决于压缩包中的每个例子。通过分析和实践这些源码,开发者可以提升对Android开发的...
例如,组件可能需要通过注册表存储其信息,或者使用线程池来提高性能。"资源"则可能指界面元素如图标、字符串、菜单等,这些资源可以在组件中统一管理和使用。 在"COMDemo"中,可能会有一个演示如何创建和使用系统...
接下来,我们分析一下给定的文件列表: 1. **IOCP.cpp**:这是主要的源代码文件,包含IOCP的实现逻辑,如创建IOCP对象、注册I/O操作、接收和处理完成端口上的事件等。 2. **stdafx.cpp**:预编译头文件,通常包含...
例子可能包含创建简单的类,如学生类,展示如何定义属性和方法,并实例化对象。继承的例子可能会展示一个基类和一个或多个子类的关系,以及如何覆盖或扩展基类的方法。多态性的例子则可能涉及到接口和抽象类的使用。...
例如,一个简单的例子可能是创建一个“学生”类,然后演示如何实例化对象并调用其方法。 异常处理也是Java编程中不可忽视的部分。在压缩包中,可能会找到关于try-catch-finally块的实例,用于演示如何捕获和处理...
在提供的压缩包文件"linux下多线程读写socket的简单例子.mht"中,应该包含了一个简单的示例代码,通过阅读和分析这个代码,你可以更好地理解和掌握这些知识点,并实践在自己的项目中。对于初学者来说,这是一个很好...
本文将详细解析标题为“C# IOCP高性能 SOCKET并发完成端口例子(有C#客户端)完整实例源码”的技术知识点,以及如何利用C#进行IOCP(I/O完成端口)开发,实现广域网下的高效SOCKET通信。 首先,我们要理解什么是...
通过分析这些例子,我们可以深入学习以下几个重要的Java知识点: 1. **基础语法**:Java的基础语法是编程的基石,包括变量声明、数据类型、运算符、流程控制(如if语句、switch语句、for循环、while循环)等。书中...