当前位置:嗨网首页>书籍在线阅读

32-结果分析

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

结果分析

分析程序的执行输出不难发现队列内的事件数不断增长,直到 40 ,然后在 40 左右浮动,直到程序结束。当然,这个大小取决于计算机的内核数。本次执行运行在四核处理器上,因此启动了4个 WriterTask 任务。

程序一开始便启动了4个 WriterTask 线程,每个线程向队列写入一个事件并休眠1s。在第一个 10 s后,队列中便存储了 40 个事件。在这 10 s中, CleanerTask 线程在4个 WriterTask 线程休眠时开始执行;由于所有事件均在10s内产生,因此,不会从队列中删除任何事件。在接下来的执行过程中,每一秒, CleanerTask 会删除4个事件, WriterTask 写入另外4个事件。因此,队列中的事件个数总在 40 左右。正如前文所说,案例执行取决于JVM可用内核数,通常而言,这个数等于CPU的内核数。

当然,你也可以修改 WriterTask 线程休眠时间,当其休眠时间足够小时, CleanerTask 只能获得更少的CPU时间,从而导致 CleanerTask 无法及时删除队列事件,队列中的事件数量会不断增长。