//缓存线程池
//特性:灵活回收空闲线程, 没有则创建
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...