课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 合作企业 > 企业笔试题 > 多线程要慎用!
  • 多线程要慎用!

    发布:昆明Java培训      来源:企业笔试题      时间:2016-02-15

  • 经常用一款叫做autoit的单线程语言写一些桌面小程序,经常的逛一些论坛。这款语言的单线程一直是她的诟病,于是想学一门多线程的语言来体验一下多线程的优势、好处。最近因为工作问题,决定要学习一门技术来充实自己 于是我来到了达内学java。

    言归正传,我回到多线程的问题上来。说实话,就达内java课程里对多线程的介绍与学习来说,实在是无法完全了解多线程的特点。

    首先,我说下多线程与单线程的区别。单线程顾名思义,就是程序中只有一根线程在工作,在程序的运行中以线性方式执行,如果遇到需要等待的任务,则整个程序 处于一种休眠状态,必须等到线程感兴趣的事件发生,程序才能继续执行。比较经典的一个案例就是sleep命令,当调用这个命令,程序就什么事也不做了,只 有等事件结束才能继续与程序进行交互,期间你跟他说什么他都不搭理你。而多线程则根据实际情况来新起线程,当一根线程需要休眠或者等待的时候,另一根线程 还可以继续工作,避免了程序失去响应的现象。

    然而,多线程是不是一定就比单线程好呢?答案是不一定。多线程要看谁在用,多线程是一把双刃剑,用的好能让程序充满灵性,用的不好就只会插自己一刀。

    我们先从线程的调起开始聊。对于新起线程的条件,一定要思量再三,如果你的线程调起非常的随意,那么很容易出现线程过多造成程序的资源消耗非常大,严重的 时候甚至令操作系统瘫痪。我们知道CPU的工作向来只是单位时间只能做一件事,随着多核计算机的出现,多根线程同时被执行也变的可行,但是多核又能多到哪 里去呢?有没有谁打开自己的电脑任务管理器看看同时有多少进程在执行,再看看每条进程里有多少线程在执行?是的,或许你明白了,计算机是属于用户的,而 cpu不是只为我们写的程序工作的。先不谈你新建这么多线程到底能不能叫你的程序更快更灵活,你知道你新起这么多线程会对线程调度造成多少的负担么!程序 是为用户服务的,而不是为程序自身服务的,快不一定就是你程序好用,况且快不快也不一定。

    或许你会说,你做事比较严谨,线程新建没什么问题。好吧,我们来谈多线程第二大难题:并发。 如果你的多根线程做着不同的事情,那么你或许对这个问题不算感冒。然而,大部分情况下,我们的线程都是在协同完成一件或者几件任务的。那么对于资源的占用 难免就会出现争抢的问题,如果你不去协同作业,那么免不了一个篮子里拿出两个一模一样的苹果,买一次东西付款两次的诸如此类事件发生。什么,你没遇到过? 好吧,你不是一个大拿就是一个大吹。即便是最牛的程序员在并发的问题上也会很头疼。因为很大部分情况下,你能做到你能预知的并行资源合理分配与排队,程序 调试期间也不会发生什么意外。那么你或许以为自己的程序万无一失去上线了,接着发生了在情理之中且在你逻辑之外的意外,这时候哭是没用的。那么到这里我就 我要说,对于线程后续要访问的资源,你一定要做好合理的调度。能锁的就锁住。在你熟练以后再慢慢放开加锁的范围,让并发进行的彻底一些。

    其实多线程里的知识很多,但是我了解的却很少,我尽量把我了解的说出来,说不到的也别笑话我。诚然,java是支持多线程的,然而,有多线程的能力并不是 一门语言调起线程的原因。只有在需要你的时候展现你的多线程能力才能展示你的强大,否则那就是卖弄,弄不好就弄巧成拙。

    最后我吐槽一下学习tcp时候的经典聊天室案例。对于罗列前面学的知识来说,这确实是一个经典案例。但是对于java来说,这是一个经典的失败案例。在 java1.4以后nio的出现也解决了这个问题,我觉得nio可以不讲,但是这个还是要告诉我们的。先不说斗鱼、YY这些动辄几万、几十万的用户连接。 即便是最基本的网络聊天室里面容纳个几百几千人应该不是问题吧。如果进来一个人就建一根线程,那么你想想你要起多少线程来支持这个聊天室?

    我其实学的很一般,但是我知道有很多比我更差的同学,那么你要学会查资料,没事多百度,埋怨老师并没有什么用,真的,即便因为你的埋怨而叫老师得到了法律 的制裁,对于你又能得到什么呢?还是抓紧时间多问问周围的同学,打开手机多百度一下,或许你会发现老师讲的其实都很简单,希望每一个选择再学习的同学能学 业有成。

    推荐文章

上一篇:模式规矩会对开发的作用

下一篇:java基础知识精华总结

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56