import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/**
* 线程池案例(jdk1.5提供的线程池的创建以及线程池定时器的运用)
* @author 谭飞
* @date 2012-02-03
*/
public class ThreadPoolDemo1 {
/**
* @param args
*/
public static void main(String[] args) {
//ExecutorService threadPool = Executors.newFixedThreadPool(3);//创建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() {
try {
Thread.sleep(40);//休息一会儿
} catch (InterruptedException e) {
e.printStackTrace();
}
for(int j = 1; j <= 5; j++)
{
System.out.println(Thread.currentThread().getName() + " 正在处理 "
+ j + " 当前循环任务是 " + task );
}
}
});
}
System.out.println(" 所有的任务都已经提交 !");
//threadPool.shutdown();//如果线程池里没有线程运行了就关闭线程池
//threadPool.shutdownNow(); //不管线程池里是否还有线程在执行任务都关闭线程池
//线程定时器一(只爆炸一次)
Executors.newScheduledThreadPool(3).schedule(
new Runnable(){
@Override
public void run() {
System.out.println("爆炸!");
}
},
5,
TimeUnit.SECONDS);
//线程定时器二 (循环爆炸)
Executors.newScheduledThreadPool(3).scheduleAtFixedRate(
new Runnable(){
@Override
public void run() {
System.out.println("爆炸...");
}
},
6,
3,
TimeUnit.SECONDS);
//线程定时器三(循环爆炸)
Executors.newScheduledThreadPool(3).scheduleWithFixedDelay(
new Runnable(){
@Override
public void run() {
System.out.println("爆炸---");
}
},
7,
4,
TimeUnit.SECONDS);
}
}