//缓存线程池
//特性:灵活回收空闲线程, 没有则创建
private static void testCachedThreadPool() {
ExecutorService service = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
final int index = i;
service.execute(new Runnable() {
@Override
public void run() {
Log.e("TAG", "Thread=" + Thread.currentThread().getName() + " index=" + index);
}
});
}
service.shutdown();
}
//单一线程池
//特性:只会创建一个线程,保证所有任务按照指定顺序执行
private static void testSingleThreadExecutor() {
ExecutorService service = Executors.newSingleThreadExecutor();
for (int i = 0; i < 10; i++) {
final int index = i;
service.execute(new Runnable() {
@Override
public void run() {
Log.e("TAG", "Thread=" + Thread.currentThread().getName() + " index=" + index);
}
});
}
}
//单一线程池
//特性:只会创建一个线程,可以控制线程的定时和执行周期
private static void testSingleThreadScheduledExecutor() {
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
//定时3秒后执行run方法
// service.schedule(new Runnable() {
// @Override
// public void run() {
// Log.e("TAG", "Thread=" + Thread.currentThread().getName());
// }
// }, 3, TimeUnit.SECONDS);
//定时2秒后执行, 每隔3秒执行一次run方法
service.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
Log.e("TAG", "Thread=" + Thread.currentThread().getName());
}
}, 2, 3, TimeUnit.SECONDS);
//停止任务
//service.shutdown();
}
//定长线程池
//特性:可控制最大并发数,超出线程数量会在队列中等待
private static void testFixedThreadPool() {
ExecutorService service = Executors.newFixedThreadPool(3);
for (int i = 0; i < 10; i++) {
final int index = i;
service.execute(new Runnable() {
@Override
public void run() {
Log.e("TAG", "Thread=" + Thread.currentThread().getName() + " index=" + index);
}
});
}
}
//定长线程池
//特性:可控制最大并发数,可以控制线程的定时和执行周期,超出线程数量会在队列中等待
private static void testScheduledThreadPool() {
ScheduledExecutorService service = Executors.newScheduledThreadPool(3);
//定时3秒后执行run方法
// service.schedule(new Runnable() {
// @Override
// public void run() {
// Log.e("TAG", "Thread=" + Thread.currentThread().getName());
// }
// }, 3, TimeUnit.SECONDS);
//定时2秒后执行, 每隔3秒执行一次run方法
service.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
Log.e("TAG", "Thread=" + Thread.currentThread().getName());
}
}, 2, 3, TimeUnit.SECONDS);
//停止任务
//service.shutdown();
}
Java-线程池的使用
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Lock锁的使用 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释...
- [toc] 在前面学习线程组的时候就提到过线程池。实际上线程组在我们的日常工作中已经不太会用到,但是线程池恰恰相反...
- 1.ThreadPoolExecutor.execute 这里主要做两件事: 小于corePoolSize的时候创...
- 引言 通过前面的文章,我们学习了Executor框架中的核心类ThreadPoolExecutor ,对于线程池的...
- 目录 引言 四种线程池 newCachedThreadPool:可缓存的线程池 newFixedThreadPoo...