关于4个线程池的创建规则以及使用方式----新人报到,2019.2.26
刚开始学习java,在此记录一下学习的内容
1.定长线程池:用于周期性地执行任务
public class ScheduledThreadPool {
public static void main(String[] args) {
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5);
for (int i = 0;i<10;i++){
int finalI = i;
scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("启动周期任务");
System.out.println("i"+ finalI);
}
},1000,2000,TimeUnit.MILLISECONDS);
//第一次启动任务的间隔,下一次启动任务的间隔,时间单位
2.单线线程池:对于任务,一个一个解决
public static void main(String[] args) {
ExecutorService executorService = Executors.newSingleThreadExecutor();//建立单线程池
executorService.execute(new Runnable() { //执行单线程
@Override
public void run() {
System.out.println("单线程开始执行");
for (int i = 1;i<10;i++) {
try {
Thread.sleep(2000); //在线程池中用Thread.sleep
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("i:"+i);
}
System.out.println("单线程执行结束");
}
});
}
}
3.多线线程池:对于任务,一次性提供多个线程,提高工作效率
public class FixedThreadPool {
public static void main(String[] args) {
ExecutorService e = Executors.newFixedThreadPool(5);
//这种写法可以一下子把100个数字输出,看不出与单线程池的区别,时间是变快了,但是很难分辨
// e.execute(new Runnable() {
// @Override
// public void run() {
// System.out.println(“多线程池开始启动”);
// for (int i = 0;i<100;i++){
//
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
// System.out.println(“i的值为:”+i);
// }
// System.out.println(“多线程池执行结束”);
}
// });
//这种写法可以清楚的看到多线程是5个5个一起输出的
for (int t =100;t>0;t–){
int finalT = t;
e.execute(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("t"+ finalT);
}
});
}
}
}
4.缓存线程池:对于任务,可以来多少解决多少
public class CachedThreadPool {
public static void main(String[] args) {
ExecutorService e = Executors.newCachedThreadPool();//创建缓存线程
for (int i = 0; i <= 100; i++) {
int finalI = i;
e.execute(new Runnable() { //启动缓存线程
@Override
public void run() {
System.out.println("缓存线程启动");
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("i:"+ finalI);
}
});
}
}