这个题目我感觉很多大哥大姐和我一样,虽然夹在众位大哥大姐中跟着一块喊着“多线程与高并发”的口号,但是这里面其实包含的东西并不像名字里面这么少。现在就开始咱们的旅程吧。 首先,得慢慢请出咱们多高这部戏的主角,先是“打手”(打手来源见JVM_Part3中扫垃圾时,打手咋跑出来了) 咱们OS在分配资源时:
- 把(除CPU之外的资源)内存等资源分配给进程
- CPU中有PC、寄存器们等,关于CPU的结构以及具体的工作方式大家可以网上看看,知道CPU是干啥的玩意就行
- OS把CPU分配给线程
提到这两个重要的点,可能大家和我一样会有疑问,为啥要这样分呢。(我之前关于JVM的部分中也有提到,大家可以去翻翻)我感觉就一句话,一个进程中生活着很多个线程,线程们是真正占用CPU资源去运行或者说执行进程中的各个任务呢。比如说 咱们打开了一个应用程序比如QQ,相当于咱们现在开启了一个进程,那么QQ里面咱们是不是存在很多小的任务比如聊天呀听音乐呀种个菜呀发个邮件呀等等(当然可能不是这么分的,大家理解意思就好),整个QQ应用程序中的多个小任务都得生活在进程中的多个线程来执行。而OS中一般是CPU来执行任务的。所以,精准定位,把CPU分配给线程不就刚好了,那么这么多线程不就可以带着自己趁手的兵器(方天画戟)就打怪闯关了。此时,咱们的打手也找到自己的称手的兵器的,可以开打了。 老规矩,图这道菜咱们是不能少的。 那既然进程提供了闯关的场景,让各个打手大显身手,施展自己的武艺。那么打手们玩的兵器、用的功夫肯定大不相同,所以,上菜。 屏幕前的观众小胡和敏小言(观众来源可以看看前面JVM的双亲委派机制那里JVM的双亲委派机制)看不下去了。说:你上的这道菜不全呀,你看菜里面有打手状态、分类啥的,你给咱上上来看看呀。 掰急呀,这就来。 打手出生->打手带着配备的兵器和学到的手艺去闯关做任务(打手做任务过程中会遇到三个挫折,幸亏菩萨给了三根毫毛才能顺利活到最后)->打手完成任务退出圈子。那咱们具体看看这个过程到底是怎样…
public enum State{
NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;
}
- 打手的不同的生命状态或者说生活状态其实是别人眼中的不同一个变量不同的值而已,细思极恐有木有…
不感慨了,说到打手的出生,其实大家都一样嘛,生下来,被起名字,被”给“性别啥的。 打手长着长着长到了一米八,然后自己划着船去岛上学了武,学完之后师傅告诉他,你快回去吧,回去了不要告诉别人我是你的师傅哦。 这里面主要就是打手闯关的时候关口都是一夫当关万夫莫开,所以每次只有一个打手可以去打,其余的只能在门外先排个队等着。 队伍中的第二个打手受不了了,肿么肥事嘛,这么长时间咋还没过去。里面的正在占着关卡闯关的打手大声向外边喊着,别站着急呀,我这不是占着还没弄完呢嘛,我没弄完你其他人就不能进来哦。 况且,我闯完,下一个也是人家坐在贴着同步队列标志的、那个离门最近的那个椅子上的那个哥们进来执行呀,你这还在队伍中第二个位置呢你急啥。 这个挑事的对手灰溜溜的转头走了,坐到了离门比较远的那排椅子上的第一个位置上。
正在里面闯关的打手心想,我容易嘛我,进了关卡后谁知道还有三个里屋呢,谁知道进哪个呀?不管了,乱敲一个吧。 他敲了一个门上贴着synchronized的里屋,里面有人喊了一身,别敲了有人…
- 原来还有打手在关卡里面,谁知道里面还有比他还先到的,人家已经进入里屋了,把门给锁了,他也只能在里屋外面等,人家里屋里面的打手执行完任务把钥匙扔出来他才可以把里屋门打开进入里屋去。
这个打手又敲了第二个里屋的门,里面的人说: - 由于我执行了下面图中左边红框中那些方法,所以这个屋被我占了,别人就不能进来了,包括你。
- 开门的方法就是右边那些红框,你仔细看看,时机成熟自会有高人帮你开门。
打手看了一会 十分钟后… 打手说,算了,你这估计还得等一会呢,我先去下个屋看看吧 还没等打手走到第三个里屋门口呢,里面从门缝里扔出来一幅图。 打手说:好好好,你不用说了,是不是你执行了上面这俩方法,把这件房间占了
Object.wait()
Thread.join()
我必须实现下面三件事才能开这间门,然后,等你出来,我再进去。 里面飞出来俩字…嗯呐 你们这都是啥规矩呀,真奇怪。 打手实现受不了了,就说,不行,你今天必须给我说一下你这XXX.wait()到底发生了什么,凭什么你执行一下这个就表示你占了这块一亩三分地呢? 里面那个又继续说,嗯呐。第三个屋是这样的,给你再看幅这第三间屋的设计原理图你就懂了。 打手:你上面那个第二个还没展开哟,你别想蒙我 嗯呐:这就来这就来 打手说,你们这也太复杂了吧,那你们是不是和我一样,有生有终呢? 嗯呐:那肯定呀,上菜 嗯呐:这样吧,看你在外边等了半天了,给你点吃的,你先享用,我们三个里屋你可能得得好一会了 打手便坐在门外吃了起来 小胡和敏小言:啊,完了,这就完了,还有没有呀? 打手,估计线程就到这了,下篇就该进程了…翻了个身睡了过去 小胡:梦话? 敏小言:估计是,都翻B面了都。老公,那咱们也去吃饭吧,吃完来再看。 走喽…
|