Java多线程的简单实现以及耗时操作的效率对比
来源:互联网 发布:扁皮弹弓皮筋长度算法 编辑:程序博客网 时间:2024/06/05 01:08
public class ThreadDemo { public static void main(String[] args) { MyRunnable command = new MyRunnable(); long start = System.currentTimeMillis(); int executeCount = 10; command.setEndListener(new MyRunnable.EndListener() { private int count = 0; @Override public void end() { count++; if (count == executeCount) { long end = System.currentTimeMillis(); System.out.println("全部请求执行完毕,耗时:" + (end - start) + "毫秒"); } } }); System.out.println("开始请求"); singleThread(command,executeCount);// multiThread(command, executeCount, 100); } /** * 单线程运行 * * @param runnable run * @param executeCount 运行次数 */ public static void singleThread(MyRunnable runnable, int executeCount) { ExecutorService executorService = Executors.newSingleThreadExecutor();//单一后台线程 for (int i = 0; i < executeCount; i++) { executorService.execute(runnable); } } /** * 多线程运行 * * @param runnable run * @param executeCount 运行次数 * @param coreThreadCount 核心线程数量 */ public static void multiThread(MyRunnable runnable, int executeCount, int coreThreadCount) { BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>(); ThreadPoolExecutor threadPool = new ThreadPoolExecutor(coreThreadCount, 200, 2000, TimeUnit.SECONDS, queue); for (int i = 0; i < executeCount; i++) { threadPool.execute(runnable); } } public static class MyRunnable implements Runnable { private EndListener listener; private int count; @Override public void run() { try { int currentCount = 0; synchronized (MyRunnable.class) { currentCount = count++; System.out.println("线程:" + Thread.currentThread().getName() + "进行第" + currentCount + "次请求"); } Thread.sleep(100); System.out.println("线程:" + Thread.currentThread().getName() + "第" + currentCount + "次请求完成"); } catch (InterruptedException e) { e.printStackTrace(); } listener.end(); } public void setEndListener(EndListener listener) { this.listener = listener; } interface EndListener { void end(); } }}
运行结果
singleThread(command,executeCount);开始请求线程:pool-1-thread-1进行第0次请求线程:pool-1-thread-1第0次请求完成线程:pool-1-thread-1进行第1次请求线程:pool-1-thread-1第1次请求完成线程:pool-1-thread-1进行第2次请求线程:pool-1-thread-1第2次请求完成线程:pool-1-thread-1进行第3次请求线程:pool-1-thread-1第3次请求完成线程:pool-1-thread-1进行第4次请求线程:pool-1-thread-1第4次请求完成线程:pool-1-thread-1进行第5次请求线程:pool-1-thread-1第5次请求完成线程:pool-1-thread-1进行第6次请求线程:pool-1-thread-1第6次请求完成线程:pool-1-thread-1进行第7次请求线程:pool-1-thread-1第7次请求完成线程:pool-1-thread-1进行第8次请求线程:pool-1-thread-1第8次请求完成线程:pool-1-thread-1进行第9次请求线程:pool-1-thread-1第9次请求完成全部请求执行完毕,耗时:1132毫秒 multiThread(command, executeCount, 100);开始请求线程:pool-1-thread-1进行第0次请求线程:pool-1-thread-2进行第1次请求线程:pool-1-thread-3进行第2次请求线程:pool-1-thread-4进行第3次请求线程:pool-1-thread-5进行第4次请求线程:pool-1-thread-6进行第5次请求线程:pool-1-thread-7进行第6次请求线程:pool-1-thread-8进行第7次请求线程:pool-1-thread-9进行第8次请求线程:pool-1-thread-10进行第9次请求线程:pool-1-thread-1第0次请求完成线程:pool-1-thread-2第1次请求完成线程:pool-1-thread-3第2次请求完成线程:pool-1-thread-5第4次请求完成线程:pool-1-thread-6第5次请求完成线程:pool-1-thread-4第3次请求完成线程:pool-1-thread-7第6次请求完成线程:pool-1-thread-10第9次请求完成线程:pool-1-thread-9第8次请求完成线程:pool-1-thread-8第7次请求完成全部请求执行完毕,耗时:121毫秒
从以上运行的结果可知,当需要进行重复的耗时操作(比如网络请求),使用多线程能大大提高运行效率
附几个常用的线程池方法:
Executors.newCachedThreadPool()(无界线程池,可以进行自动线程回收); Executors.newFixedThreadPool(int)(固定大小线程池); Executors.newSingleThreadExecutor()(单个后台线程);
阅读全文
0 0
- Java多线程的简单实现以及耗时操作的效率对比
- 【Java基础】HashMap的四种遍历以及耗时对比
- java对象操作、DOM4J操作XML以及java反射效率的对比
- Java-多个多线程求和例子以及各种方式的执行效率对比
- 多线程 +1操作的几种实现方式,及效率对比
- 分享矩阵乘法单线程与多线程的Java实现与效率对比,请教Strassen算法
- Python 实现的Binary Search 算法以及效率的对比
- java多线程理解 以及java实现的简单的死锁
- java HashMap遍历的三种方式以及效率对比
- JAVA中几种文件操作流的效率对比
- JAVA中几种文件操作流的效率对比
- 计算程序耗时的简单实现代码
- 简单的Struts2的Interceptors(拦截器)机制介绍以及利用拦截器实现用户登陆时执行耗时操作并自动跳转的实例
- 如何在web页面中,实现耗时操作的后台执行?多线程吗?
- Java中计算程序运行耗时的方法对比
- 代码的耗时操作
- 操作列与常量的效率对比
- Android多线程,让耗时的操作去后台运行吧
- WebService发布与调用问题:expected: {http://schemas.xmlsoap.org/soap/envelope/}Envelope but found: {http://schemas.xmlsoap.org/wsdl/}def
- 爬虫 Python爬虫利器二之Beautiful Soup的用法
- activiti使用java代码生成数据表
- Java String
- php中序列化与反序列化
- Java多线程的简单实现以及耗时操作的效率对比
- 最小生成树prim算法
- MTK平台 电池驱动相关
- 服务器可能遭受攻击汇总
- PHP中htmlentities和htmlspecialchars的区别
- canvas获取base64图片并上传php服务器
- Java基础教程7-基本数学运算
- lnmp详细编译安装教程
- 学习优化需要什么样的心态