
【 线程池的核心组成 】
【 线程池分类 】
➢ java.util.concurrent.Executors类可以创建线程池
➣ 创建无大小限制的线程池 : public static ExecutorService newCacheThreadPool();
➢ 创建固定大小的线程池 : public static ExecutorService newFixedThreadPool(int nThreads);
➣ 单线程池 : public static ScheduledExecutorService newSingleThreadScheduledExecutor();
➣ 创建定时调度池 : public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize).
【 创建四种线程池 】
下面将具体演示四中线程池的创建以及其自身的使用特点。当Executors创建完成了线程池之后可以返回“ExecutorService”接口对象,而这个接口对象里面有两个方法来接收线程的执行:
★ 接收Callable: public <T> Future<T> submit(Callable<T> task);
★ 接收Runnable: public Future<?> submit(Runnable task);
范例:创建无限量线程池
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MLDNTestDemo {
public static void main(String[] args) throws Exception {
// 现在创建了一个线程池
ExecutorService service =
Executors.newCachedThreadPool();
for (int x = 0; x < 10; x++) {
service.submit(() -> { // 线程池会负责启动
System.out.println(Thread.currentThread()
.getName() + "执行操作。");
});
}
service.shutdown(); // 线程池执行完毕后需要关闭
}
}
范例:创建有限量的线程池
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MLDNTestDemo {
public static void main(String[] args) throws Exception {
// 线程池只能够装下3个人
ExecutorService service =
Executors.newFixedThreadPool(3) ;
for (int x = 0; x < 10; x++) {
// 线程池会负责启动
service.submit(() -> {
System.out.println(Thread.currentThread()
.getName() + "执行操作。");
});
}
service.shutdown(); // 线程池执行完毕后需要关闭
}
}
范例:创建单线程池
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MLDNTestDemo {
public static void main(String[] args) throws Exception {
ExecutorService service =
Executors.newSingleThreadExecutor() ;
for (int x = 0; x < 10; x++) {
// 线程池会负责启动
service.submit(() -> {
System.out.println(Thread.currentThread()
.getName() + "执行操作。");
});
}
service.shutdown(); // 线程池执行完毕后需要关闭
}
}
除了以上的三中线程池之外还可以创建一个定时调度池,这个调度池主要以间隔调度为主。如果要创建调度池则肯定使用ScheduledExecutorService接口完成,在该接口之中包含有如下的两个方法:
延迟启动:public ScheduledFuture<?>schedule(Runnable command, long delay, TimeUnit unit);
间隔调度:ScheduledFuture<?>scheduleAtFixedRate(Runnable command,
long initialDelay, long period, TimeUnit unit);
范例:创建调度池
import java.util.concurrent.Executors;
import java.ut