1、固定大小的线程池
示例:10个任务的执行,只会用到线程池中创建好的3个线程
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Test {
public static void main(String[] args) {
//固定大小线程池
ExecutorService executorService = Executors.newFixedThreadPool(3);
for(int i=0;i<10;i++) {
final int index = i;
//执行10个任务,用到的线程就是线程池里面固定的那3个
executorService.submit(() -> {
System.out.println(Thread.currentThread().getName() + ":执行任务" + index);
});
}
executorService.shutdown();//关闭线程池
/**
* ====运行结果====
* pool-1-thread-2:执行任务1
* pool-1-thread-1:执行任务0
* pool-1-thread-3:执行任务2
* pool-1-thread-1:执行任务4
* pool-1-thread-2:执行任务3
* pool-1-thread-2:执行任务7
* pool-1-thread-1:执行任务6
* pool-1-thread-3:执行任务5
* pool-1-thread-1:执行任务9
* pool-1-thread-2:执行任务8
*/
}
}
2、单线程线程池
示例:10个任务的执行,只会用到1个线程执行这10条任务
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Test {
public static void main(String[] args) {
//单个线程
ExecutorService executorService = Executors.newSingleThreadExecutor();
for(int i=0;i<10;i++) {
final int index = i;
executorService.submit(() -> {
System.out.println(Thread.currentThread().getName() + ":执行任务" + index);
});
}
executorService.shutdown();//关闭线程池
/**
* ====运行结果====
* pool-1-thread-1:执行任务0
* pool-1-thread-1:执行任务1
* pool-1-thread-1:执行任务2
* pool-1-thread-1:执行任务3
* pool-1-thread-1:执行任务4
* pool-1-thread-1:执行任务5
* pool-1-thread-1:执行任务6
* pool-1-thread-1:执行任务7
* pool-1-thread-1:执行任务8
* pool-1-thread-1:执行任务9
*/
}
}
3、可缓存的线程池
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Test {
public static void main(String[] args) {
//可缓存的线程池,创建线程的数量不确定,处理多任务时,慎用(创建了太多的线程,导致oom)
ExecutorService executorService = Executors.newCachedThreadPool();
for(int i=0;i<10;i++) {
final int index = i;
executorService.submit(() -> {
System.out.println(Thread.currentThread().getName() + ":执行任务" + index);
});
}
executorService.shutdown();//关闭线程池
/**
* ====运行结果====
* pool-1-thread-1:执行任务0
* pool-1-thread-4:执行任务3
* pool-1-thread-6:执行任务5
* pool-1-thread-5:执行任务4
* pool-1-thread-3:执行任务2
* pool-1-thread-2:执行任务1
* pool-1-thread-8:执行任务7
* pool-1-thread-7:执行任务6
* pool-1-thread-10:执行任务9
* pool-1-thread-9:执行任务8
*/
}
}
4、定时调度线程池
示例:每隔3秒钟,线程池创建的3个线程会执行这10个任务
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Test {
public static void main(String[] args) {
//定时调度的线程池
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3);
for(int i=0;i<10;i++) {
final int index = i;
scheduledExecutorService.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ":执行任务" + index);
}
}, 1,3, TimeUnit.SECONDS);
}
//scheduledExecutorService.shutdown();//关闭线程池
}
}