多线程要慎用!
在来达内之前,经常用一款叫做autoit的单线程语言写一些桌面小程序,经常的逛一些论坛。这款语言的单线程一直是她的诟病,于是想学一门多线程的语言来体验一下多线程的优势、好处。最近因为工作问题,决定要学习一门技术来充实自己,于是我来到了达内学java。
言归正传,我回到多线程的问题上来。说实话,就达内java课程里对多线程的介绍与学习来说,实在是无法完全了解多线程的特点。
首先,我说下多线程与单线程的区别。单线程顾名思义,就是程序中只有一根线程在工作,在程序的运行中以线性方式执行,如果遇到需要等待的任务,则整个程序处于一种休眠状态,必须等到线程感兴趣的事件发生,程序才能继续执行。比较经典的一个案例就是sleep命令,当调用这个命令,程序就什么事也不做了,只有等事件结束才能继续与程序进行交互,期间你跟他说什么他都不搭理你。而多线程则根据实际情况来新起线程,当一根线程需要休眠或者等待的时候,另一根线程还可以继续工作,避免了程序失去响应的现象。
然而,多线程是不是一定就比单线程好呢?答案是不一定。多线程要看谁在用,多线程是一把双刃剑,用的好能让程序充满灵性,用的不好就只会插自己一刀。
我们先从线程的调起开始聊。对于新起线程的条件,一定要思量再三,如果你的线程调起非常的随意,那么很容易出现线程过多造成程序的资源消耗非常大,严重的时候甚至令操作系统瘫痪。我们知道CPU的工作向来只是单位时间只能做一件事,随着多核计算机的出现,多根线程同时被执行也变的可行,但是多核又能多到哪里去呢?有没有谁打开自己的电脑任务管理器看看同时有多少进程在执行,再看看每条进程里有多少线程在执行?是的,或许你明白了,计算机是属于用户的,而cpu不是只为我们写的程序工作的。先不谈你新建这么多线程到底能不能叫你的程序更快更灵活,你知道你新起这么多线程会对线程调度造成多少的负担么!程序是为用户服务的,而不是为程序自身服务的,快不一定就是你程序好用,况且快不快也不一定。
或许你会说,你做事比较严谨,线程新建没什么问题。好吧,我们来谈多线程第二大难题:并发。 如果你的多根线程做着不同的事情,那么你或许对这个问题不算感冒。然而,大部分情况下,我们的线程都是在协同完成一件或者几件任务的。那么对于资源的占用难免就会出现争抢的问题,如果你不去协同作业,那么免不了一个篮子里拿出两个一模一样的苹果,买一次东西付款两次的诸如此类事件发生。什么,你没遇到过?好吧,你不是一个大拿就是一个大吹。即便是最牛的程序员在并发的问题上也会很头疼。因为很大部分情况下,你能做到你能预知的并行资源合理分配与排队,程序调试期间也不会发生什么意外。那么你或许以为自己的程序万无一失去上线了,接着发生了在情理之中且在你逻辑之外的意外,这时候哭是没用的。那么到这里我就我要说,对于线程后续要访问的资源,你一定要做好合理的调度。能锁的就锁住。在你熟练以后再慢慢放开加锁的范围,让并发进行的彻底一些。
其实多线程里的知识很多,但是我了解的却很少,我尽量把我了解的说出来,说不到的也别笑话我。诚然,java是支持多线程的,然而,有多线程的能力并不是一门语言调起线程的原因。只有在需要你的时候展现你的多线程能力才能展示你的强大,否则那就是卖弄,弄不好就弄巧成拙。
最后我吐槽一下学习tcp时候的经典聊天室案例。对于罗列前面学的知识来说,这确实是一个经典案例。但是对于java来说,这是一个经典的失败案例。在java1.4以后nio的出现也解决了这个问题,我觉得nio可以不讲,但是这个还是要告诉我们的。先不说斗鱼、YY这些动辄几万、几十万的用户连接。即便是最基本的网络聊天室里面容纳个几百几千人应该不是问题吧。如果进来一个人就建一根线程,那么你想想你要起多少线程来支持这个聊天室?
我其实学的很一般,但是我知道有很多比我更差的同学,那么你要学会查资料,没事多百度,埋怨老师并没有什么用,真的,即便因为你的埋怨而叫老师得到了法律的制裁,对于你又能得到什么呢?还是抓紧时间多问问周围的同学,打开手机多百度一下,或许你会发现老师讲的其实都很简单,希望每一个选择再学习的同学能学业有成。
【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!
Java开发高端课程免费试学
大咖讲师+项目实战全面提升你的职场竞争力
- 海量实战教程
- 1V1答疑解惑
- 行业动态分析
- 大神学习路径图
相关推荐
更多2017-10-24
2017-11-23
达内就业喜报
更多>Java开班时间
-
北京 丨 2月26日
火速抢座 -
上海 丨 2月26日
火速抢座 -
广州 丨 2月26日
火速抢座 -
兰州 丨 2月26日
火速抢座 -
杭州 丨 2月26日
火速抢座 -
南京 丨 2月26日
火速抢座 -
沈阳 丨 2月26日
火速抢座 -
大连 丨 2月26日
火速抢座 -
长春 丨 2月26日
火速抢座 -
哈尔滨 丨 2月26日
火速抢座 -
济南 丨 2月26日
火速抢座 -
青岛 丨 2月26日
火速抢座 -
烟台 丨 2月26日
火速抢座 -
西安 丨 2月26日
火速抢座 -
天津 丨 2月26日
火速抢座 -
石家庄 丨 2月26日
火速抢座 -
保定 丨 2月26日
火速抢座 -
郑州 丨 2月26日
火速抢座 -
合肥 丨 2月26日
火速抢座 -
太原 丨 2月26日
火速抢座 -
苏州 丨 2月26日
火速抢座 -
武汉 丨 2月26日
火速抢座 -
成都 丨 2月26日
火速抢座 -
重庆 丨 2月26日
火速抢座 -
厦门 丨 2月26日
火速抢座 -
福州 丨 2月26日
火速抢座 -
珠海 丨 2月26日
火速抢座 -
南宁 丨 2月26日
火速抢座 -
东莞 丨 2月26日
火速抢座 -
贵阳 丨 2月26日
火速抢座 -
昆明 丨 2月26日
火速抢座 -
洛阳 丨 2月26日
火速抢座 -
临沂 丨 2月26日
火速抢座 -
潍坊 丨 2月26日
火速抢座 -
运城 丨 2月26日
火速抢座 -
呼和浩特丨2月26日
火速抢座 -
长沙 丨 2月26日
火速抢座 -
南昌 丨 2月26日
火速抢座 -
宁波 丨 2月26日
火速抢座 -
深圳 丨 2月26日
火速抢座 -
大庆 丨 2月26日
火速抢座