博客
关于我
java并发学习2:线程的应用
阅读量:308 次
发布时间:2019-03-04

本文共 783 字,大约阅读时间需要 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】优化。

转载地址:http://xtlq.baihongyu.com/

你可能感兴趣的文章
前端HTML中表单action属性的作用
查看>>
java线程(17)——Lock锁,三个线程抢票加上lock锁后变成三个线程排队买票
查看>>
java线程(19)——信号灯法,电视播放,生产者与消费者的案例
查看>>
java线程(20)——Runnable线程池
查看>>
计算机网络ip知识点
查看>>
react(3)——导入了正确的包,但是运行不出来,原因是因为导入包的顺序有问题
查看>>
react(10)——三大属性state,props,refs,总结其特点
查看>>
javascript(7)——定义函数的两种方式以及使用的时候传入多个参数的情况,arguments和...rest
查看>>
react(20)——使用函数的柯里化实现获取表单的数据
查看>>
react(28)——react脚手架public目录下文件讲解
查看>>
Visual Studio Code——安装react插件,提高代码速率
查看>>
mybatis(3)——使用map参数进行添加用户案列
查看>>
Vscode——快速折叠所有的代码
查看>>
看领导者系列第二部《成为领导者》的几点感悟
查看>>
mybatis(11)——在mybatis中配置并使用log4j日志
查看>>
mybatis(12)——在mybatis中通过limit和RowBounds实现分页查询
查看>>
spring(5)——通过import标签整合多个beans
查看>>
leetcode-两数之和(简单题-1)
查看>>
ubantu软件管理命令及远程登陆命令
查看>>
不同路径--动态规划
查看>>