java并发学习2:线程的应用

1、同步异步
  • 以调用方角度来讲,如果需要等待结果返回,才能继续运行就是同步

  • 不需要等待结果返回,就能继续运行就是异步

设计多线程可以让方法执行变为异步的(即不要巴巴干等着)比如说读取磁盘文件时,假设读取操作花费了 5 秒钟,如果没有线程调度机制,这 5 秒 cpu 什么都做不了,其它代码都得暂停…

  • 比如在项目中,视频文件需要转换格式等操作比较费时,这时开一个新线程处理视频转换,避免阻塞主线程

  • tomcat 的异步 servlet 也是类似的目的,让用户线程处理耗时较长的操作,避免阻塞 tomcat 的工作线程

  • ui 程序中,开线程进行其他操作,避免阻塞 ui 线程

2、提高效率

充分利用多核 cpu 的优势,提高运行效率。想象下面的场景,执行 3 个计算,最后将计算结果汇总。

计算1 10ms
计算2 11ms
计算3 9ms
汇总 1ms
  • 串行执行,那么总共花费的时间是10 + 11 + 9 + 1 = 31ms

  • 四核 cpu,各个核心分别使用线程 1 执行计算 1,线程 2 执行计算 2,线程 3 执行计算 3,那么 3 个线程是并行的,花费时间只取决于最长的那个线程运行的时间,即11ms最后加上汇总时间只会花费12ms

多核 cpu 才能提高效率,单核仍然时是轮流执行,并发

3、结论
  • 单核 cpu 下,多线程不能实际提高程序运行效率,不同线程并发使用cpu。

  • 多核 cpu 可以并行跑多个线程,但能否提高程序运行效率还是要分情况。有些任务,经过精心设计,将任务拆分,并行执行,可以提高运行效率。不是所有计算任务都能拆分,也不是所有任务都需要拆分。

  • IO 操作不占用 cpu,只是我们一般拷贝文件使用的是【阻塞 IO】,这时相当于线程虽然不用 cpu,但需要一直等待 IO 结束,没能充分利用线程。所以才有后面的【非阻塞 IO】和【异步 IO】优化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值