线程池(ThreadPool)分为以下四种:
1.newCachedThreadPool(创建一个可缓存的线程池,如果线程长度超过处理的需要,可灵活的回收空闲线程,若无可回收,则新建线程)
代码:
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
for (int i= 0;i<10;i++){
final int index = 1;
try {
Thread.sleep(index * 100);
} catch (InterruptedException e) {
e.printStackTrace();
}
cachedThreadPool.execute(new Runnable() {
@Override
public void run() {
System.out.print(index);
}
});
}
2.newFixedThreadPool(创建一个定长的线程池,可控制线程的并发数,超出的会在队列中等待执行)
代码:
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
for (int i=0 ;i<10;i++){
final int index = 1;
fixedThreadPool.execute(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
3.newScheduledThreadPool (创建一个定长的线程池,支持定时及周期性任务的执行)
代码:
ScheduledExecutorService scheduleThreadPool = Executors.newScheduledThreadPool(5);
scheduleThreadPool.schedule(new Runnable() {
@Override
public void run() {
System.out.print("delay 3 seconds");
}
},3, TimeUnit.SECONDS);
4.newSingleThreadPool (他只会用唯一线程去执行任务)
代码:
ExecutorService singelThreadPool = Executors.newSingleThreadExecutor();
for (int i= 0 ;i< 10;i++){
final int index = 1;
singelThreadPool.execute(new Runnable() {
@Override
public void run() {
try {
System.out.print(index);
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}