java执行器与线程池
来源:互联网 发布:花生壳我的域名在哪 编辑:程序博客网 时间:2024/05/17 10:41
java执行器与线程池
构建一个新的线程是有一定代价的。如果程序需要创建大量生命周期很短的线程,应该使用线程池。
执行器Executor
执行器类有许多静态工厂方法构建线程池。
线程池
上述表中前三个方法返回实现了ExecutorService接口的ThreadPoolExecutor对象。
使用submit()方法提交Runnable对象或Callable对象。
当用完一个线程池的时候,调用shutdown()。
例子,使用线程池查询文件
import java.io.File;import java.util.ArrayList;import java.util.List;import java.util.concurrent.*;public class SearchFile { public static void main(String[] args) throws ExecutionException, InterruptedException { File directory = new File("D:\\"); String filename = "确认.pdf"; ExecutorService pool = Executors.newCachedThreadPool(); SearchFileThread search = new SearchFileThread(directory, filename, pool); Future<List<String>> futures = pool.submit(search); List<String> results = futures.get(); for (String str : results) { System.out.println(str); } pool.shutdown(); int largestPoolSize = ((ThreadPoolExecutor)pool).getLargestPoolSize(); System.out.println("线程池最大的长度:" + largestPoolSize); } static class SearchFileThread implements Callable<List<String>> { private File directory; private String filename; private ExecutorService pool; public SearchFileThread(File directory, String filename, ExecutorService pool) { this.directory = directory; this.filename = filename; this.pool = pool; } @Override public List<String> call() throws Exception { List<String> resultList = new ArrayList<>(); File[] files = directory.listFiles(); List<Future<List<String>>> results = new ArrayList<>(); if (files != null) { for (File file : files) { if (file.isDirectory()) { SearchFileThread thread = new SearchFileThread(file, filename, pool); Future<List<String>> result = pool.submit(thread); results.add(result); } else {// System.out.println(file.getAbsolutePath()); if (file.getName().equals(filename)) { resultList.add(file.getAbsolutePath()); } } } } for (Future<List<String>> future : results) { resultList.addAll(future.get()); } return resultList; } }}
上述表中后两个方法返回实现了ScheduledExecutorService接口的对象。
例子
import java.util.Date;import java.util.concurrent.*;public class ScheduledExecutorTest { public static void main(String[] args) { ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(2); Callable<String> callable = new Callable<String>() { @Override public String call() throws Exception { String time = new Date().toString(); System.out.println(time); return time; } }; // 预定在指定时间之后执行任务 ScheduledFuture<String> future = scheduledExecutorService.schedule(callable, 1000, TimeUnit.MILLISECONDS); Runnable runnable1 = new Runnable() { @Override public void run() { String time = new Date().toString(); System.out.println("scheduleAtFixedRate() " + time); } }; //public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,long initialDelay,long period,TimeUnit unit); // 周期长度是period // 多少秒之后再执行, 是从上一个任务开始时开始计算 ScheduledFuture<?> future1 = scheduledExecutorService.scheduleAtFixedRate(runnable1, 0, 1, TimeUnit.MINUTES); Runnable runnable2 = new Runnable() { @Override public void run() { String time = new Date().toString(); System.out.println("scheduleWithFixedDelay() " + time); } }; // public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,long initialDelay,long delay,TimeUnit unit); // 两个周期之间有delay长度的时延 // 多少秒之后再执行, 是从上一个任务结束时开始计算 ScheduledFuture<?> future2 = scheduledExecutorService.scheduleWithFixedDelay(runnable2, 0, 1, TimeUnit.MINUTES); }}
阅读全文
0 0
- java执行器与线程池
- java线程执行器
- java线程执行器
- 使用 Java 执行器实现线程池
- 使用 Java 执行器实现线程池
- java 线程池批量执行
- Java 线程执行器 详解
- java 等待线程/线程池执行完毕
- Java线程池执行器ThreadPoolExecutor工作原理
- Java并发之执行器和线程池
- java并发 -线程池,任务执行
- Java 判断线程池 执行完毕
- Java多线程--任务执行(线程池)
- 分析Java线程池执行原理
- Java线程池执行原理分析
- Java 线程池执行原理分析
- java中的线程执行器总结!
- Java中的线程执行器总结
- linux服务器之间传输文件的四种方式
- 获取相同元素中的最大高度
- struts2标签<s:select>
- HDU 2004
- Wowza服务器系列(4):使用rtmp协议向wowza推流的wowoza配置方法
- java执行器与线程池
- Oracle:select into 查询没有记录的解决办法
- Android-常用数据结构List(ArrayList)----小总结(1)
- 搭建自动化测试可持续集成平台 jenkins ant jmeter
- Android Wi-Fi源码分析之wpa_supplicant初始化(二):wpa_supplicant_init中的三个关键点
- 搭建一套phpstorm+wamp+xdebug调试PHP的环境
- PageRank算法详解
- 给别人做项目一些注意事项
- MapReduce used in log analysis