前记
上一篇温习的是ThreadLocal共享复杂数据的情况,这次是来温习java5中的线程池的知识。
场景及代码
线程池与Executors类的使用
package com.test.thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/*********************************************************************************
//* Copyright (C) 2016 kunchi . All Rights Reserved.
//*
//* Filename: ThreadPoolTest.java
//* Revision: 1.0
//* Author: <gao yunqi>
//* Created On: 2016年7月25日
//* Modified by:
//* Modified On:
//*
//* Description: <java 线程池>
/********************************************************************************/
public class ThreadPoolTest {
/**
* @param args
*/
public static void main(String[] args) {
//ExecutorService threadPool = Executors.newFixedThreadPool(3);//固定的线程池
//ExecutorService threadPool = Executors.newCachedThreadPool();//缓存的线程池,线程池中的线程数是根据任务数来变化的
ExecutorService threadPool = Executors.newSingleThreadExecutor();//创建单一线程(可以解决一个线程死后重启的问题)
for (int i = 1; i <=10; i++) {
final int task = i;
threadPool.execute(new Runnable() {
@Override
public void run() {
for (int i = 1; i <=10; i++) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"is looping of " + i +"for task of " + task);
}
}
});
}
System.out.println("all of task has committed");
//threadPool.shutdown();
Executors.newScheduledThreadPool(3)./*schedule*/scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("bombing");
}
}, 5,1, TimeUnit.SECONDS);
}
}
以上就是线程池相关的使用和介绍。