什么是线程池?介绍四个线程池在Java中的使用
使用线程池有很多优点,比如节省系统资源开销,节省创建和销毁线程的时间等。当我们需要处理更多的任务时,可以使用线程池,可能会有很多用户不知道如何使用Java线程池。下面的小系列将与您分享如何在Java中使用四个线程池。
线程池介绍:
线程池是多线程的一种形式,在处理过程中将任务添加到队列中,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果一个线程在托管代码中处于空闲状态(例如等待一个事件),线程池将插入另一个工作线程来保持所有处理器忙碌。如果线程池中的所有线程总是忙碌的,但是队列包含挂起的工作,则线程池将在一段时间后创建另一个工作线程,但是线程的数量永远不会超过最大值。超过最大值的线程可以排队,但在其他线程完成之前,它们不会启动。
Java四种线程池的使用:
Java通过Executors提供了四个线程池,它们是:
NewCachedThreadPool创建一个可缓存的线程池。如果线程池长度超过处理需求,可以灵活回收闲置线程;如果没有回收,可以创建一个新线程。
NewFixedThreadPool创建一个固定长度的线程池,可以控制最大并发线程数,多余的线程会在队列中等待。
newScheduledThreadPool创建一个固定长度的线程池,支持定期和周期性的任务执行。
newSingleThreadExecutor创建一个单线程线程池,它只使用唯一的工作线程来执行任务,确保所有任务都按照指定的顺序(先进先出、后进先出、优先级)执行。
(1) newCachedThreadPool
创建可缓存的线程池。如果线程池的长度超过处理需求,空闲线程可以灵活回收。如果没有回收,创建一个新线程。示例代码如下:
01包装测试;
02导入Java . util . concurrent . executorservice;
03导入Java . util . concurrent . executors;
04公共类ThreadPoolExecutorTest {
05公共静态void main(String[]args){ 0
06 executorservice cachedThreadPool=executors . new cachedThreadPool();
07 for(int I=0;i 10I){ 0
08 final int index=I;
09尝试{
10Thread.sleep(索引* 1000);
11}捕获(中断例外){ e
12e . printstacktrace();
13}
14 cache ThreadPool . execute(新的Runnable(){ 0
15公共无效运行(){ 0
16System.out.println(索引);
17}
18});
19}
20}
21}
复制代码
包装测试;
导入Java . util . concurrent . executorservice;
导入Java . util . concurrent . executors;
公共类ThreadPoolExecutorTest {
公共静态void main(String[]args){ 0
executor service cachedThreadPool=executors . new cachedThreadPool();
for(int I=0;i 10I){ 0
最终int索引=I;
尝试{
Thread.sleep(索引* 1000);
} catch(中断异常){ e
e . printstacktrace();
}
cachedthreadpool . execute(new Runnable(){ 0
public void run(){ 0
System.out.println(索引);
}
});
}
}
}
版权声明:什么是线程池?介绍四个线程池在Java中的使用是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。