新手?没做过多线程实践?来,其实很简单,看完秒会( 三 )
大概的方式有以下几种:
文章插图
这里我们使用线程池的方式:
在停用线程池后加上一个判断条件即可:
executorService.shutdown();while (!executorService.awaitTermination(100, TimeUnit.MILLISECONDS)) { logger.info("worker running");}long total = totalWords.total();long end = System.currentTimeMillis();logger.info("total sum=[{}],[{}] ms",total,end-start);
这样我们再次尝试 , 发现无论多少次结果都是正确的了:
文章插图
效率提升可能还会有朋友问 , 这样的方式也没见提升多少效率啊 。
这其实是由于我本地文件少 , 加上一个文件处理的耗时也比较短导致的 。
甚至线程数开的够多导致频繁的上下文切换还是让执行效率降低 。
为了模拟效率的提升 , 每处理一个文件我都让当前线程休眠 100 毫秒来模拟执行耗时 。
先看单线程运行需要耗时多久 。
文章插图
总共耗时:[8404] ms
接着在线程池大小为 4 的情况下耗时:
文章插图
文章插图
总共耗时:[2350] ms
可见效率提升还是非常明显的 。
更多思考这只是多线程其中的一个用法 , 相信看到这里的朋友应该多它的理解更进一步了 。
再给大家留个阅后练习 , 场景也是类似的:
在 Redis 或者其他存储介质中存放有上千万的手机号码数据 , 每个号码都是唯一的 , 需要在最快的时间内把这些号码全部都遍历一遍 。
有想法感兴趣的朋友欢迎在文末留言参与讨论 。
总结希望看完的朋友心中能对文初的几个问题能有自己的答案:
- 为什么需要多线程?
- 怎么实现一个多线程程序?
- 多线程带来的问题及解决方案?
作者:crossoverJie链接:来源:掘金
- 摄像头|摄像头造型别出心裁 realme全新手机设计专利曝光
- 入门|做抖音影视赚钱比工资多,教大家新手也可快速入门
- 参数|外行看参数内行看细节,新手能牢记这四点,你也算半个内行了
- 如何在电脑上看4K UHD原盘电影(新手教学)
- 腾讯数据工程师推荐的Python新手入门书籍,还是首发电子版
- 新手陷阱:你在编程时会犯的6种错误
- 年轻|接班人明确自身价值,全新手机定格让自拍更美,年轻真好
- 推出的手机|年底想换新手机?iQOO这几款人气机型值得你考虑
- 白话评说四款苹果新手机,非技术性,仅就适用性讨论
- 小白|新手小白如何开始直播带货?掌握这四点,分分钟成为直播带货大师