//缓存线程池
//特性:灵活回收空闲线程, 没有则创建
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();
}
网友评论