package Thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class ThreadPoolTest {
public static void main(String[] args) {
//创建固定的线程数量,任务执行完后不会自动kill
//ExecutorService threadPool = Executors.newFixedThreadPool(3);
//创建缓存的线程,线程的数量会根据任务的数量自动的增加,如果当前的线程数量超过任务的数量,过一定的时间会自动的kill,直到与当前任务数量相匹配
//ExecutorService threadPool = Executors.newCachedThreadPool();
//创建一个线程,始终保持线程池中有一个线程,一个死了,另一个就会被创建出来
ExecutorService threadPool = Executors.newSingleThreadExecutor();
for (int i=1;i<=10;i++) {
final int task = i;//每运行一次for循环就会再创建一个final int类型的
threadPool.execute(new Runnable() {
@Override
public void run() {
for(int j=1;j<=10;j++) {
System.out.println(Thread.currentThread().getName()+"循环了"+j+"次,"+
"为了第"+task+"个任务");
}
}
});
}
threadPool.shutdown();//任务完成后,kill所有的线程,如果没有这段代码,那么线程不死,程序不结束。
//计时器,到一定时间会自动执行对应的任务。
Executors.newScheduledThreadPool(3).schedule(new Runnable() {
@Override
public void run() {
System.out.println("到我爆炸了");
}
}, 3, TimeUnit.SECONDS);
//以一定的频率,第一次是隔initialDelay后,然后每次以period为间隔执行任务
Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("间隔1s");
}
}, 3, 1, TimeUnit.SECONDS);
}
}