手机版

什么是线程池?介绍四个线程池在Java中的使用

时间:2021-09-01 来源:互联网 编辑:宝哥软件园 浏览:

使用线程池有很多优点,比如节省系统资源开销,节省创建和销毁线程的时间等。当我们需要处理更多的任务时,可以使用线程池,可能会有很多用户不知道如何使用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或者邮箱删除。

相关文章推荐