Java多线程详解(底层原理 + 小demo + 线程池)与node单线程例子做比较

提示: 要对多线程和单线程有一定了解,还要知道基本的什么是线程什么是进程,二者间的关系,才能继续往下看哦

这篇文章起源于这段时间的勤思考,我一开始做的是Java,后来转做了段时间PHP,又做了段时间node,相比起Java,最大的不同点应该就是单线程与多线程的区别了;可是node中又有很多的异步IO,asycn和await等异步同步回调方法,心中就起疑惑了,于是带着疑问查阅了很多资料,由于网上很多都是复制粘贴的文章,真正自己总结的实在太少,打破砂锅问到底的文章也很少,大部分就来来去去告诉你Thread,Runable,run(),start()那些如何使用Java 的多线程而已,或者简单潦草一句“因为Java语言底层的支持,所以是多线程”…
!我真是佛了,在搜集大量资料后这里自己做一个总结,希望帮助到跟我一样有十万个为什么的同学们解惑:
问题一:node既然是有异步,那就是有子线程,那为何还能说是单线程串行执行呢??
其实node是可以多条线程的,当然也可以开多进程去实现多核优势,而且还有线程池去管理子线程,最简单的例子就是异步回调了,既然都异步了,那就是开启子线程去跑,不影响唯一一条主线程的前提下进行操作,在子线程完成了再通知回主线程,异步IO机制;但是单线程的前提就是不能阻塞主线程,可以让主线程不停的忙(边等烧开水边等煮饭边砍柴,水烧开了通知主线程去关火),不能让主线程去做计算量大的,执行时间长的工作(不能让主线程自己去炒菜,否则烧水和煮饭它就管不了了,分身乏术)。而且node的异步机制就是事件驱动的,简单滴说,就是水不烧开它不去管,饭没煮好鸣笛它也不去管,这里的煮饭烧水就是它在维护看护的一个事件队列,它一直在等待下一个事件的到来,再去做相对应的操作。
在实际开发中,就发生过并非请求量较高的时候并且还不能用异步的情况下,堆积了大量等待执行的请求,请求没有执行也没有修改等待状态,由于有定时器轮询,很多末尾的请求又重新被拿出来放到了请求队列中;还有一种就是加了await的同步方法,主线程眼巴巴等着它返回,另外调用的第三方又着急催,主线程没办法只能继续await,结果就请求超时了,所以能异步处理的事件尽量异步处理,不等待返回值的地方还是让它慢慢跑,解放主线程去执行其他的任务。
问题二:Java为什么就那么特殊支持多线程呢??
这个问题我查了很多资料,大部分都只说了Java怎么实现多线程,却没说到底具体为什么支持。既然大家都说它是底层实现的支持,那Java底层就是JVM,那就是JVM支持,于是我换了个搜索问法“JVM多线程的实现”,有了。资料说:Java从遥远的1.2版本开始,JVM就是被设计
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值