`
happmaoo
  • 浏览: 4601589 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

应用Executors来建立Thread pool

阅读更多
<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/46860.html" frameborder="0" width="468" scrolling="no" height="60"></iframe>

Java Gossip:Executors

有时候您需要建立一堆Thread来执行一些小任务,然而频繁的建立Thread有时会是个开销,因为Thread的建立必须与作业系统互动,如果能建立一个Thread pool来管理这些小的Thread并加以重复使用,对于系统效能会是个改善的方式。

您可以使用Executors来建立Thread pool,Executors有几个static方法,列出如下:

方法 说明
newCachedThreadPool 建立可以快取的Thread,每个Thread预设可idle 60秒

newFixedThreadPool

包括固定数量的Thread

newSingleThreadExecutor

只有一个Thread,循序的执行指定给它的每个任务
newScheduledThreadPool 可排程的Thread
newSingleThreadScheduledExecutor 单一可排程的Thread

举个简单的实例,下面的程式使用newFixedThreadPool方法建立Thread pool,当中包括五个可以重复使用的Thread,您可以指定Runnable物件给它,程式中会产生十个Runnable物件,由于Thread pool中只有五个可用的Thread,所以后来建立的五个Runnable必须等待有空闲的Thread才会被执行:
  • ExecutorDemo.java
package onlyfun.caterpillar;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ExecutorDemo {
public static void main(String[] args) {
ExecutorService service = Executors.newFixedThreadPool(5);

for(int i = 0; i final int count = i;
service.submit(new Runnable() {
public void run() {
System.out.println(count);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}

}
});
}

service.shutdown(); // 最后记得关闭Thread pool
}
}

submit()方法也接受实作Callable介面的物件,最后传回Future物件,可以取得Callable执行过后的传回结果。

如果想利用Executors进行排程,例如排定某个工作30秒后执行:
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor( );
scheduler.schedule(new Runnable( ) {
public void run() {
// 排程工作
}
},
30, TimeUnit.SECONDS);


或排定某个工作5秒后执行,之后每30秒执行一次:
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor( );
final ScheduledFuture future = scheduler.scheduleAtFixedRate(new Runnable( ) {
public void run() {
// 排程工作
System.out.println("t");
}
},
0, 5, TimeUnit.SECONDS);

// 排定 60 秒后取消future
scheduler.schedule(new Runnable( ) {
public void run( ) {
future.cancel(false);
}
}, 60, TimeUnit.SECONDS);



如上所示,想要取消排程任务,可以呼叫ScheduledFuture的cancel()方法。

<!--google_ad_client = "pub-9750319131714390";google_ad_width = 160;google_ad_height = 600;google_ad_format = "160x600_as";google_ad_type = "text_image";google_ad_channel = "";//-->


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1922563


分享到:
评论

相关推荐

    java 线程池管理类:Executors_.docx

    `java.util.concurrent.Executors`类提供了丰富的工具方法来帮助开发者轻松创建和管理不同类型的线程池。通过合理选择和配置线程池,可以在提高程序执行效率的同时,有效地控制系统资源消耗。理解`Executors`类中...

    5_Executors源码阅读1

    在源码中,`Executors`类主要通过调用`ThreadPoolExecutor`、`ScheduledThreadPoolExecutor`等内部类的构造函数来创建线程池。这些内部类实现了ExecutorService接口,提供了调度和执行任务的能力。例如,`...

    Android代码-java-concurrency-patterns

    Java Concurrency Patterns and Features Concurrency Patterns and features found in Java, through multithreaded programming....Scheduled Thread Pool Atomics Futures FutureTask CompletableFuture Java M

    关于Thread讲解

    在Java中,可以通过继承`Thread`类或实现`Runnable`接口来创建线程。 - **通过继承Thread类**: ```java public class MyThread extends Thread { @Override public void run() { // 线程执行的代码 } } ...

    线程-线程池-锁-集合-Map-队列.docx

    在Java中,使用`ExecutorService`和`ThreadPoolExecutor`来创建线程池,而不是直接使用`Executors`,因为`Executors`创建的线程池可能会导致资源耗尽的问题。 集合是Java中存储数据的主要工具,包括List、Set和Map...

    Java开发手册(阿里巴巴带-alibaba-IDE插件)

    《阿里巴巴Java开发手册》是阿里内部Java工程师所遵循的开发规范,涵盖编程规约、单元测试规约、异常日志规约、MySQL规约、工程规约、安全规约等,这是近万名阿里Java技术精英的经验总结,并经历了多次大规模一线...

    Java-Thread-Pool-example:一个简单的 Java 线程池示例

    在这个"Java-Thread-Pool-example"中,我们将深入探讨Java线程池的实现、优势以及如何使用它。 Java中的线程池是通过`java.util.concurrent`包下的`ExecutorService`接口和`ThreadPoolExecutor`类来实现的。`...

    ThreadPool的实现

    工具类如`Executors`提供了方便的方法来创建各种类型的线程池,如固定大小的线程池、单线程线程池等。 在实际应用中,合理地配置和使用线程池可以显著提升系统的性能和稳定性。例如,在高并发场景下,设置适当的...

    commons-poo ljar包

    Apache Commons Pool是一个开源项目,提供了一种对象池化机制,它是Java编程中实现线程池技术的重要组件。线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池可以...

    100行Java代码构建一个线程池[借鉴].pdf

    this.executor = Executors.newFixedThreadPool(poolSize); } public void execute(Runnable task) { if (executor.isShutdown()) { System.out.println("线程池已关闭,无法执行任务"); } else { executor....

    Best-Thread-Pool-implement-JDK:服务器端

    "Best-Thread-Pool-implement-JDK"项目很可能是一个探讨如何高效实现线程池的开源项目,针对服务器端优化。服务器端应用程序通常需要处理大量的并发请求,而线程池能有效地管理和调度线程资源,提高系统的响应速度和...

    Java多线程的4种实现方式(源代码)

    - **实现原理**:通过继承`Thread`类并重写`run()`方法来定义线程的行为。 - **示例代码**: ```java public class MyThread extends Thread { private String threadName; public MyThread(String threadName...

    线程四笔记,对于正在学习Java的朋友可以参考一下

    通常,我们使用Executors工厂类来创建线程池。 1. **线程池的好处**: - 节省内存,减少频繁创建和销毁线程的开销。 - 提高响应速度,线程池能更快地响应新任务,因为线程已经在池中等待。 - 更好地管理资源,...

    Java多线程实现[参考].pdf

    这里,我们可以使用线程池`pool`的`execute`方法来执行服务任务,如`pool.execute(new ServiceThread(socket))`,这样能确保新任务在已存在的线程上运行,而不是每次都创建新线程。 服务线程`ServiceThread`执行...

    线程池Thread

    2. **线程池中的线程(Pool Threads)**:预先创建或按需创建的一组线程,它们负责从工作队列取出并执行任务。 3. **线程工厂(Thread Factory)**:用于创建新线程的对象,可以根据需求定制线程的行为,如设置线程...

    Thread_Testing:测试项目针对不同的线程执行模式

    Thread_Testing测试Multi-Thread执行方法1.ThreadPoolExecutor: 以当前device为online的核心数量来初始化Thread Pool大小2.Executors.newCachedThreadPool() 未指定Thread Pool大小预设实作上为0, Pool Size为...

    Vert.x线程模型揭秘

    例如,通过Event Loop Group来处理非阻塞任务,通过Worker Pool来处理阻塞任务。 #### 五、结论 Vert.x通过精心设计的线程模型,确保了高性能和可伸缩性。通过合理的使用不同类型的线程池,开发者可以轻松地构建出...

    java多线程编程总结

    ExecutorService pool = Executors.newFixedThreadPool(5); Future&lt;Integer&gt; future = pool.submit(new Callable() { @Override public Integer call() throws Exception { return 100 + 10; } }); System....

    threadPoolDemo

    ThreadFactory threadFactory = Executors.defaultThreadFactory(); RejectedExecutionHandler handler = new ThreadPoolExecutor.AbortPolicy(); ThreadPoolExecutor executor = new ThreadPoolExecutor( ...

    80w字Java面试宝典(非常全)

    ava八股文通常是指Java技术面试中常见的知识点集合,...线程池及并发包:Executors、ForkJoinPool、CountDownLatch、CyclicBarrier等。 并发优化:CAS、无锁编程、AQS原理等。 内容不限于这些,适合中、大厂面试来用!

Global site tag (gtag.js) - Google Analytics