ExecutorService建立线程池
来源:互联网 发布:语音录制软件ios 编辑:程序博客网 时间:2024/05/21 17:56
一: ExecutorService executorService = Executors.newCacheThreadPool();
根据需要创建一个新的线程池,不过以前创建的线程池可用时则复用以前创建的线程池。这些池通常会提高执行的很多短期异步任务的程序的性能。调用execute(如果可用)将重用以前构造的线程。如果没有现有线程可用,一个新的线程将被创建并添加到池中。尚未使用的60秒线程终止和从缓存中移除。因此,剩下的空闲足够长池不会消耗任何资源。需要注意的是具有类似性质的,但不同的信息(例如,超时参数)池可能使用的ThreadPoolExecutor构造来创建。
codes:
ExecutorService executorService = Executors.newCacheThreadPool();
for(int i = 0;i < 100;i++){
final int index = i;
try {
Thread.sleep(index * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
executorService.execute(new Runnable(){
system.out.printLn(index);
});
}
线程池为无限大,当执行第二个任务时第一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。
二:ExecutorService executorService = Executors.newFixesThreadPool(int nThread);
创建一个使用操作关闭共享的无界队列的线程固定数量的线程池。在任何时候,至多线程的线程将被激活的处理任务。如果额外的任务提交时,所有线程处于活动状态,他们将在队列中等待,直到某个线程可用。如果任何线程关闭前的执行过程中终止因故障,如果需要执行后续任务,将会有新取而代之。池中的线程将一直存在,直到它明确地关闭。
codes:
ExecutorService executorService = Executors.newFixesThreadPool(6);
for(int i = 0;i < 100;i++){
final index = i;
executorService.execute(new Runnable(){
try{
system.out.printLn(index);
Thread.sleep(2000);
}(InterruptedException e) {
e.printStackTrace();
}
});
}
线程池的大小为6.
三:ScheduledExecutorService executorService = Executors.newScheduledThreadPool(int corePoolSize);corePoolSize(保持在线程池里面线程的数量,即使他们是空闲的)
创建一个定长线程池,支持定时及周期性任务执行。
codes:
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(6);
scheduledThreadPool.schedule(new Runnable() {
@Override
public void run() {
System.out.println("delay 3seconds");
}
}, 3, TimeUnit.SECONDS);
每三秒执行一次,
ScheduledExecutorService scheduledThreadPool= Executors.newScheduledThreadPool(6);
scheduledThreadPool.schedule(newRunnable() {
@Override
public void run() {
System.out.println("delay3 seconds");
}
},1, 3, TimeUnit.SECONDS);
延迟一秒,每三秒执行一次。
四:ExecutorService executorService = Executors.newSingleThreadExecutor();
创建一个使用单个worker线程操作以无界队列的执行人。(但是请注意,如果这个单一线程执行之前关闭期间终止由于故障,一个新的将在需要时执行后续的任务取代其位置。)任务被保证顺序地执行,以及不超过一个的任务将是有源在任何给定的时间。与其他等效的newFixedThreadPool(1)所返回的执行保证无需重新配置使用其他的线程。
codes:
ExecutorService singleThreadExecutor= Executors.newSingleThreadExecutor();
for (int i = 0; i < 10; i++){
final int index = i;
singleThreadExecutor.execute(newRunnable() {
@Override
public void run() {
try {
System.out.println(index);
Thread.sleep(2000);
} catch (InterruptedExceptione) {
// TODO Auto-generated catchblock
e.printStackTrace();
}
}
});
}
它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO,优先级)执行。- ExecutorService建立线程池
- ExecutorService 建立多线程线程池的步骤
- ExecutorService(线程池)+线程
- Android ExecutorService线程池
- ExecutorService线程池
- ExecutorService线程池
- ExecutorService线程池
- ExecutorService线程池
- 线程池ExecutorService newCachedThreadPool()
- ExecutorService线程池
- ExecutorService线程池
- Java ExecutorService 线程池
- ExecutorService线程池
- Android ExecutorService线程池
- Java ExecutorService 线程池
- ExecutorService线程池
- ExecutorService线程池
- Java ExecutorService 线程池
- 插入排序
- 【OMNet++】tictoc示例四
- LeetCode OJ 1. Two Sum
- 浅析Mysql Join语法以及性能优化
- XML解析之 SAX解析
- ExecutorService建立线程池
- iOS 新面试题
- FT系列touch---------suspend和resume的实现
- 逗号表达式
- Java XML解析工具 JDOM
- 新手学JavaScript(三)----超酷消息警告框插件(SweetAlert)
- 面试官的五大类型
- 矢量绘图工具 Ipe
- functionCharts常见属性解释