四种线程池的创建
/**
* 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,
* 若无可回收,则新建线程。示例代码如下:
*/
public static void CachedThreadPool(){
ExecutorService service = Executors.newCachedThreadPool();
for(int i=0;i<100;i++){
service.execute(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("线程名:"+Thread.currentThread().getName()+"数值:"+j);
j++;
}
});
}
}
/**
* 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。示例代码如下:
* @throws Exception
*/
public static void FixedThreadPool() throws Exception{
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
for(int i=0;i<100;i++){
Thread.sleep(100);
fixedThreadPool.execute(new Runnable() {
@Override
public void run() {
System.out.println("线程名:"+Thread.currentThread().getName()+"数值:"+j);
j++;
}
});
}
}
/**
* 创建一个定长线程池,支持定时及周期性任务执行。延迟执行示例代码如下:
*/
public static void ScheduledThreadPool(){
System.out.println("延时执行的线程池");
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
//支持周期性执行
// scheduledThreadPool.schedule(new Runnable() {
//
// @Override
// public void run() {
// // TODO Auto-generated method stub
// System.out.println("延迟3秒执行");
// }
// },3, TimeUnit.SECONDS);
scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("延迟1秒后每3秒执行"+j+"次。");
j++;
}
}, 1, 3, TimeUnit.SECONDS);
}
/**
* 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
* 示例代码如下:
*/
public static void SingleThreadExecutor(){
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
for(int i=0;i<10;i++){
singleThreadExecutor.execute(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"每3秒执行第"+j+"次。");
j++;
}
});
}
}