- 浏览: 238284 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
xchd:
分别在什么时候(情况下)用ThreadFactory、Exec ...
Executor线程池实例 -
mikey_5:
是不是没有写完啊
Executor线程池实例 -
xinyao:
楼主,你好,请问能给我发个源码吗,我要在一个页面能实时看到下载 ...
Android学习系列(19)--App离线下载 -
sdtzkj:
...
jasperReport 帮助文档 api -
shero_ys:
public class VrowsePicActivity ...
android handler 实现三步曲
Executor 是 java5 下的一个多任务并发执行框架(Doug Lea),可以建立一个类似数据库连接池的线程池来执行任务。这个框架主要由三个接口和其相应的具体类组成。Executor、 ExecutorService 和 ScheduledExecutorService 。
1 、 Executor 接口:是用来执行 Runnable 任务的;它只定义一个方法- execute(Runnable command);执行 Ruannable 类型的任务。
2 、 ExecutorService 接口: 继承Executor接口,提供了执行Callable任务和中止任务执行的服务。
3 、 ScheduledExecutorService 接口:继承 ExecutorService 接口,提供了按排程执行任务的服务。
4 、 Executors 类:为了方便使用, 建议使用 Executors的工具类来得到 Executor 接口的具体对象。
Executors 类有几个重要的方法,在这里简明一下:
1 、 callable(Runnable task): 将 Runnable 的任务转化成 Callable 的任务
2 、 newSingleThreadExecutor(): 产生一个 ExecutorService 对象,这个对象只有一个线程可用来执行任务,若任务多于一个,任务将按先后顺序执行。
3 、 newCachedThreadPool(): 产生一个 ExecutorService 对象,这个对象带有一个线程池,线程池的大小会根据需要调整,线程执行完任务后返回线程池,供执行下一次任务使用。
4 、 newFixedThreadPool(int poolSize): 产生一个 ExecutorService 对象,这个对象带有一个大小为 poolSize 的线程池,若任务数量大于 poolSize ,任务会被放在一个 queue 里顺序执行。
5 、 newSingleThreadScheduledExecutor(): 产生一个 ScheduledExecutorService 对象,这个对象的线程池大小为 1 ,若任务多于一个,任务将按先后顺序执行。
6 、 newScheduledThreadPool(int poolSize): 产生一个 ScheduledExecutorService 对象,这个对象的线程池大小为 poolSize ,若任务数量大于 poolSize ,任务会在一个 queue 里等待执行 。
有关Executor框架其它类的说明请参看JAVA 5 的 API文档
下面是几个简单的例子,用以示例Executors中几个主要方法的使用。
1、 Task.java 任务
2、 SingleThreadExecutorTest.java 单线程执行程序的测试
3、 CachedThreadPoolTest.java 线程池线程执行程序的测试
4、 FixedThreadPoolTest.java 线程池线程执行程序的测试(线程数固定)
5、 DaemonThreadFactory.java 守护线程生成工厂
6、 MaxPriorityThreadFactory.java 大优先级线程生成工厂
7、 MinPriorityThreadFactory.java 小优先级线程生成工厂
8、 ThreadFactoryExecutorTest.java 在自定义线程生成工厂下的测试
1、 Task.java 任务
package com.thread; //可执行任务 public class Task implements Runnable { // 中断信号 volatile boolean stop = false; // 该任务执行的次数 private int runCount = 0; // 任务标识 private int taskId; public Task(int taskId) { this.taskId = taskId; System.out.println("Create Task-" + taskId); } // 执行任务 public void run() { while (!stop) { try { Thread.sleep(10); } catch (InterruptedException e) { System.out.println("Task interrupted..."); } // 线程运行3次后,中断信号置为true if (++runCount == 3) stop = true; // 输出一些语句 System.out.println("" + Thread.currentThread().toString() + "\t\t\t\t execute Task-" + taskId + "'s " + runCount + "th run. "); } } }
2、 SingleThreadExecutorTest.java 单线程执行程序的测试
package com.thread; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class SingleThreadExecutorTest { public static void main(String[] args) { try { // 创建一个单线程执行程序 ExecutorService executorService = Executors.newSingleThreadExecutor(); for (int i =1; i <= 3; i++) { executorService.execute(new Task(i)); } executorService.shutdown(); } catch (Exception e) {} } }
3、 CachedThreadPoolTest.java 线程池线程执行程序的测试
package com.thread; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CachedThreadPoolTest { public static void main(String[] args) { try { // 建新线程的线程池,如果之前构造的线程可用则重用它们 ExecutorService executorService = Executors.newCachedThreadPool(); for (int i =1; i <= 4; i++) { executorService.execute(new Task(i)); } executorService.shutdown(); } catch (Exception e) {} } }
4、 FixedThreadPoolTest.java 线程池线程执行程序的测试(线程数固定)
package com.thread; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class FixedThreadPoolTest { public static void main(String[] args) { try { // 创建固定线程数的线程池,以共享的无界队列方式来运行这些线程 ExecutorService executorService = Executors.newFixedThreadPool(2); for (int i =1; i <= 5; i++) { executorService.execute(new Task(i)); } executorService.shutdown(); } catch (Exception e) {} } }
5、 DaemonThreadFactory.java 守护线程生成工厂
package com.thread; import java.util.concurrent.ThreadFactory; public class DaemonThreadFactory implements ThreadFactory { //创建一个守护线程 public Thread newThread(Runnable r) { Thread t = new Thread(r); t.setDaemon(true); return t; } }
评论
发表评论
-
Android学习系列(19)--App离线下载
2011-08-13 11:40 1403Android学习系列(19)--App离线下载 ... -
Android学习系列(20)-App数据格式之解析Json
2011-08-13 11:28 1603JSON数据格式,在Android中被广泛运用于客户端和网络( ... -
Android学习系列(1)--为App签名(为apk签名)
2011-08-13 11:20 1681写博客是一种快乐,前提是你有所写,与人分享,是另一种快乐, ... -
Android学习系列(4)--App自适应draw9patch不失真背景
2011-08-13 11:16 2211做人要大度,海纳百川,做事要圆滑,左右逢源,这让我想到了编程也 ... -
Android自定义View之一:初探实例 .
2011-08-13 11:09 1485Android自定义View实现很简单 继承View,重写构 ... -
Android多媒体学:播放网络上的视频 .
2011-08-13 11:05 2068Android支持播放网络上的视频。在播放网络上的视频时,牵涉 ... -
Android多媒体学:利用AudioRecord类实现自己的音频录制程序 .
2011-08-13 11:02 5876AudioRecord类相对于MediaRecorder来说, ... -
Android多媒体:实现图像的编辑和合成 .
2011-08-13 10:59 2165package demo.camera; import ja ... -
自动完成框
2011-05-03 13:44 741请下载源码 -
读取sd卡照片
2011-05-03 13:43 1306请下载源码 -
UC菜单栏布局
2011-05-03 13:41 1124请下载附件 -
android handler 实现三步曲
2011-04-06 16:59 1435一. 要实现接口: public class VrowseP ... -
android 横竖屏切换
2011-03-25 14:33 1934①不理会。。②只竖屏 ... -
android 分辨率调试
2011-03-25 13:36 1867一:不同的layout Android ... -
android 图片内存溢出
2011-03-21 18:24 3086我的代码如下 is = new FileI ... -
android Exid 不可修改
2011-03-21 13:47 1259Android:只读EditText内容可滚动(禁止输入法)的 ... -
android 对话提示框大全
2011-03-21 12:34 3190Android 对话框(Dialog)大全 建立你自己的对话框 ... -
Android消息提示框和对话框
2011-03-21 12:29 1362在某些情况下需要向用户弹出提示消息,如显示错误信息,收到短消息 ... -
android tab 用法
2011-03-11 15:10 1751TabHost广泛运用于android程序中,在程序中运用Ta ... -
Android Intent 用法汇总
2011-03-08 18:17 1122显示网页 1. Uri uri = Uri.parse( ...
相关推荐
本文将深入探讨四种常见的Java线程池实例:`ThreadPoolExecutor`、`Executors`提供的固定线程池、单线程池和定时线程池。 1. **ThreadPoolExecutor**: 这是最基础也是最灵活的线程池实现,可以通过`new ...
`Executor`线程池是一种优秀的解决方案,它可以帮助开发者更好地控制并发执行的任务,避免过度创建线程导致资源浪费和系统稳定性下降。本文将深入探讨`Android Executor`线程池的工作原理、优势以及如何在实际开发中...
Java并发之串行线程池实例解析 Java并发之串行线程池实例解析是Java并发编程中非常重要的一部分,今天我们就来详细介绍如何实现一个串行的线程池实例。在介绍之前,首先我们需要了解什么是串行线程池。串行线程池是...
jdk自带线程池实例详解 jdk自带的线程池是Java开发中一个非常重要的概念,特别是在多线程编程中。线程池是线程的容器,每次只执行额定数量的线程,线程池就是用来管理这些额定数量的线程。下面我们来详细了解jdk...
Spring Boot @Async 注解线程池实例详解 1. Spring Boot @Async 注解简介 Spring Boot 提供了 @Async 注解,可以将方法异步化,使得方法的调用者不需要等待方法的执行结果,直接返回,而方法的实际执行将提交给 ...
SpringMVC配置线程池Executor做多线程并发操作的代码实例 在本文中,我们将探讨如何使用SpringMVC框架来配置线程池Executor,以实现多线程并发操作。线程池Executor是Spring框架提供的一种线程池实现,它允许我们在...
- **任务**:Executor框架处理的主要对象是任务,任务可以是实现`Runnable`接口的实例,也可以是实现`Callable`接口的实例。`Runnable`接口的任务没有返回值,而`Callable`接口的任务可以返回一个结果。 - **任务...
1. **创建线程池**:首先,我们需要创建一个线程池实例。通常,我们可以根据实际需求设置线程池参数。例如,如果数据量大且系统资源充足,可以适当增加线程数量;反之,若系统资源有限,应控制线程数量,避免资源...
5. Executors:包含了一系列静态工厂方法,用于生成不同类型的线程池实例。 常见的线程池实现包括: 1. newSingleThreadExecutor():创建一个单线程的线程池,保证任务按提交顺序串行执行。 2. ...
Java Executor 框架的实例详解 Java Executor 框架是 Java 中一个很重要的并发编程模型,主要用于并发任务的执行和管理。Executor 框架的实例详解可以帮助开发者更好地理解和使用 Executor 框架,以下是 Java ...
1. 创建线程池实例,配置合适的参数。 2. 将每张图片的下载任务封装为Runnable或Callable对象。 3. 使用线程池的`execute()`或`submit()`方法提交任务。 4. 实现缓存机制,确保图片下载后被正确存储和检索。 5. 监控...
在这个示例中,我们首先创建了一个固定大小为4的线程池,然后提交了10个任务(`WorkerThread`实例)。每个任务在`run`方法中模拟执行耗时操作,线程池会确保最多只有4个任务同时执行。当所有任务完成后,调用`...
JDK线程池和Spring线程池的使用实例解析 JDK线程池和Spring线程池是两种常用的线程池实现,它们都提供了线程池的功能,但它们在使用和配置上有所不同。下面我们将详细介绍JDK线程池和Spring线程池的使用实例解析。 ...
3. **线程池接口与实现**:在Java中,`java.util.concurrent.Executor` 是线程池的顶级接口,它定义了执行任务的基本方法。`ExecutorService` 是实际的线程池接口,提供了更丰富的管理和控制线程池的方法。`...
基于`Executor`,`ExecutorService`接口提供了更丰富的功能,如关闭线程池的`shutdown()`和`shutdownNow()`方法,以及管理和控制任务执行的方法,如`submit()`、`invokeAll()`和`invokeAny()`。`ExecutorService`...
在Android中,我们通常使用Java的Executor框架来创建和管理线程池。Java的ExecutorService接口是线程池的主要接口,而ThreadPoolExecutor类是它的具体实现。 三、线程池的参数 ThreadPoolExecutor的构造函数接收...
总结来说,Java Socket编程中的TCP服务端线程池实例展示了如何利用线程池优化服务器性能,避免频繁创建线程,同时提供了一种优雅的方式来处理并发客户端请求。在实际开发中,结合Spring框架,我们可以更加灵活且高效...
在Java中,`Executor`接口是线程池的顶层接口,但更确切地说它是一个执行线程的工具而非线程池本身。真正代表线程池的是`ExecutorService`接口。为了简化线程池的配置和使用,`Executors`类提供了一系列静态工厂方法...
ExecutorService是一个线程池接口,它继承了Executor接口,并提供了一些用于任务提交与执行管理的扩展方法。 在代码中,首先创建了一个ServerSocket对象,它监听特定端口(本例中为8000)。然后使用ExecutorService...
在`SocketServer`类中,你需要创建一个`ExecutorService`实例,这是Java内置的线程池接口。你可以使用`Executors`工具类的静态方法来创建线程池,例如`newFixedThreadPool(int nThreads)`,它会创建一个固定大小的...