返回顶部
首页 > 资讯 > 精选 >java线程池的匹配文件数量计算方法是什么
  • 259
分享到

java线程池的匹配文件数量计算方法是什么

2023-06-17 10:06:39 259人浏览 薄情痞子
摘要

这篇文章主要讲解了“java线程池的匹配文件数量计算方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java线程池的匹配文件数量计算方法是什么”吧!构建一个新的线程的代价还是有些高的

这篇文章主要讲解了“java线程池的匹配文件数量计算方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java线程池的匹配文件数量计算方法是什么”吧!

构建一个新的线程的代价还是有些高的,因为它涉及与操作系统的交互。如果你的程序创建了大量生存期很短的线程,那就应该使用线程池。一个线程池包含大量准备运行的空闲线程。你将一个Runnable对象给线程池,线程池中的一个线程就会调用run方法。当run方法退出时,线程不会死亡,而是继续在池中准备为下一个请求提供服务。

执行器(Executor)类有大量用来构建线程池的静态工厂方法,下表给出了一个总结

 方法描述 
 newCachedThreadPool在需要时创建新线程:空闲线程会被保留60秒 
 newFixedThreadPool 池包含固定数量的线程;空闲线程会一直被保留
 newSingleThreadExecutor 只有一个线程的“池”,这个线程顺序执行每一个递交上来的任务
 newScheduledThreadPool 为预定执行而构建的固定线程池
 newSingleThreadScheduledExecutor 为预定执行而构建的单线程“池”

newCachedThreadPool、newFixedThreadPool和newSingleThreadExecutor这三个方法返回ThreadPoolExecutor类(这个类实现了ExecutorService接口)对象。

向线程池提交任务的方法为:将一个实现Runnable或Callable接口的对象提交给ExecutorService:

Future<?> submit(Runable task)   Future<T> submit(Runable task, T result)   Future<t> submit(Callable<T> task)

线程池会在适当的时候尽早执行提交的任务,调用submit时会返回一个Future对象,用以查询该任务的状态,或者取消该任务。

***个submit方法提交一个Runable对象返回一个Future<?>,可使用该对象调用isDone、cancel、或者isCancelled来查询任务状态。但是此Future对象的get方法在任务完成的时候知识简单的返回null;

第二个版本的submit方法同样提交一个Runable对象,并且返回Future的get方法在任务完成的时候返回传入的result对象;

第三个submit方法提交一个Callable对象,并且返回的Future对象将在计算结构、准备好的时候得到它。

当想要注销一个线程池,可调用shutdown方法,该方法启动该线程池的关闭序列。此时线程池并不是马上就壮烈牺牲了线程也没了,而是等待所以任务都完成以后,线程池中的线程才会死亡,被关闭的执行器不再接受新任务。也可以调用shutdownNow,此时线程池会取消正在排队等待处理的任务并且试图中断正在执行的线程。

下面总结了在使用连接池时应该做的事:

  1. 调用Executor类中静态的newCachedThreadPool或newFixedThreadPool方法。

  2. 调用submit来提交一个Runnable或Callable对象。

  3. 如果希望能够取消任务或如果提交了一个Callable对象,那就保存好返回的Future对象。

  4. 当不想再提交任何任务时调用shutdown。

除了常规的计算匹配文件数量外,这个程序打印出执行过程中池中的***线程数量。但从ExecutorService接口不能得到这个信息。因此,我们必须将pool对象转型成一个ThreadPoolExecutor类对象。

import java.io.*;  import java.util.*;  import java.util.concurrent.*;   public class ThreadPoolTest  {     public static void main(String[] args) throws Exception     {        Scanner in = new Scanner(System.in);        System.out.print("Enter base directory (e.g. /usr/local/jdk5.0/src): ");        String directory = in.nextLine();        System.out.print("Enter keyWord (e.g. volatile): ");        String keyword = in.nextLine();         ExecutorService pool = Executors.newCachedThreadPool();         MatchCounter counter = new MatchCounter(new File(directory), keyword, pool);        Future<Integer> result = pool.submit(counter);         try       {           System.out.println(result.get() + " matching files.");        }        catch (ExecutionException e)        {           e.printStackTrace();        }        catch (InterruptedException e)        {        }        pool.shutdown();         int largestPoolSize = ((ThreadPoolExecutor) pool).getLargestPoolSize();        System.out.println("largest pool size=" + largestPoolSize);     }  }    class MatchCounter implements Callable<Integer>  {         public MatchCounter(File directory, String keyword, ExecutorService pool)     {        this.directory = directory;        this.keyword = keyword;        this.pool = pool;     }      public Integer call()     {        count = 0;        try       {           File[] files = directory.listFiles();           ArrayList<Future<Integer>> results = new ArrayList<Future<Integer>>();            for (File file : files)              if (file.isDirectory())              {                 MatchCounter counter = new MatchCounter(file, keyword, pool);                 Future<Integer> result = pool.submit(counter);                 results.add(result);              }              else             {                 if (search(file)) count++;              }            for (Future<Integer> result : results)              try             {                 count += result.get();              }              catch (ExecutionException e)              {                 e.printStackTrace();              }        }        catch (InterruptedException e)        {        }        return count;     }          public boolean search(File file)     {        try       {           Scanner in = new Scanner(new FileInputStream(file));           boolean found = false;           while (!found && in.hasNextLine())           {              String line = in.nextLine();              if (line.contains(keyword)) found = true;           }           in.close();           return found;        }        catch (IOException e)        {           return false;        }     }      private File directory;     private String keyword;     private ExecutorService pool;     private int count;  }

感谢各位的阅读,以上就是“java线程池的匹配文件数量计算方法是什么”的内容了,经过本文的学习后,相信大家对java线程池的匹配文件数量计算方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: java线程池的匹配文件数量计算方法是什么

本文链接: https://lsjlt.com/news/288256.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java线程池的匹配文件数量计算方法是什么
    这篇文章主要讲解了“java线程池的匹配文件数量计算方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java线程池的匹配文件数量计算方法是什么”吧!构建一个新的线程的代价还是有些高的...
    99+
    2023-06-17
  • quartz线程池配置的方法是什么
    要配置Quartz线程池,可以使用以下方法:1. 在Quartz配置文件中配置线程池属性:可以在quartz.properties文...
    99+
    2023-09-18
    quartz
  • spring配置线程池的方法是什么
    在Spring中配置线程池的方法有两种: 使用XML配置文件: 首先,在Spring的XML配置文件中添加一个元素,指定线程池...
    99+
    2023-10-25
    spring
  • Java线程池优化的方法是什么
    这篇文章主要介绍“Java线程池优化的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java线程池优化的方法是什么”文章能帮助大家解决问题。升级版线程池的优化新增了4种拒绝策略。分别为:M...
    99+
    2023-06-29
  • java线程池实现的方法是什么
    Java中线程池的实现方法是通过使用java.util.concurrent包中的ThreadPoolExecutor类来创建和管理...
    99+
    2023-10-11
    java
  • java线程池创建的方法是什么
    在Java中,线程池可以使用以下两种方法来创建: 使用`Executors`类中的静态方法来创建线程池: ExecutorSer...
    99+
    2023-10-25
    java
  • java多线程批量上传文件的方法是什么
    Java中实现多线程批量上传文件可以通过以下步骤来实现:1. 创建一个线程池,用于管理上传文件的线程。```javaExecutor...
    99+
    2023-09-13
    java
  • spring线程池插数据的方法是什么
    在Spring中,可以使用`ThreadPoolTaskExecutor`来创建一个线程池,并使用`execute`方法将任务提交到...
    99+
    2023-10-25
    spring
  • Java线程池参数的含义是什么
    这篇文章给大家分享的是有关Java线程池参数的含义是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。java多线程开发时,常常用到线程池技术,这篇文章是对创建java线程池时的七个参数的详细解释。从源码中可以看...
    99+
    2023-06-29
  • springboot集成线程池的方法是什么
    在Spring Boot中集成线程池可以通过以下方法进行: 添加依赖:在pom.xml文件中添加以下依赖: org.s...
    99+
    2023-10-21
    springboot
  • c++线程池实现的方法是什么
    C++线程池的实现方法可以使用C++中的多线程库,如std::thread和std::mutex等来实现。以下是一个简单的C++线程...
    99+
    2023-10-26
    c++
  • tomcat线程池调优的方法是什么
    Tomcat线程池调优的方法包括以下几个方面: 调整线程池大小:根据系统负载和并发请求量来调整线程池大小,确保线程池能够满足系统...
    99+
    2024-03-12
    tomcat
  • java多线程批量处理数据的方法是什么
    Java中处理批量数据的方法有以下几种:1. 使用线程池:创建一个线程池,将任务拆分为多个子任务,然后将子任务交给线程池中的线程进行...
    99+
    2023-09-27
    java
  • Java匹配正则表达式的方法是什么
    这篇文章主要介绍了Java匹配正则表达式的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java匹配正则表达式的方法是什么文章都会有所收获,下面我们一起来看看吧。一.我们先举个例子来看看Java匹配正...
    99+
    2023-07-05
  • mongodb正则匹配数字的方法是什么
    在MongoDB中,可以使用$regex操作符结合正则表达式来匹配数字。以下是一些示例:1. 匹配任意数字:```javascrip...
    99+
    2023-09-04
    mongodb
  • python匹配两组数据的方法是什么
    匹配两组数据可以使用循环结构和条件判断,具体方法有多种,下面列举几种常见的方法:1. 使用循环遍历两组数据,逐个比较元素是否相等。这...
    99+
    2023-08-19
    python
  • mongodb数字模糊匹配的方法是什么
    在MongoDB中,可以使用正则表达式来实现数字模糊匹配。例如,假设有一个集合存储了一些文档,其中一个字段是数字类型。现在我们想要模...
    99+
    2023-08-23
    mongodb
  • vlookup多行多列批量匹配的方法是什么
    要在多行多列中批量匹配使用VLOOKUP函数,可以使用数组公式。以下是步骤:1. 在新的工作表或工作簿中创建一个表格,将需要匹配的数...
    99+
    2023-09-07
    vlookup
  • java多线程批量处理的方法是什么
    Java中实现多线程批量处理的方法有以下几种:1. 使用线程池:通过创建线程池来管理一组线程,可以提交多个任务给线程池,线程池会自动...
    99+
    2023-08-18
    java
  • java多线程共享变量的方法是什么
    Java多线程共享变量的方法有以下几种:1. 使用共享对象:多个线程共享一个对象,并且该对象的属性被多个线程访问和修改。通过使用sy...
    99+
    2023-08-26
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作