扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
关于线程控制的问题
关于线程控制的问题
已知有一个队列,希望其中的元素超过200个的时候,进行元素获取并删除(即poll)操作,然后将获取到的所有元素批量写入到数据库中。
本人现在已经用了一种线程轮询的方式实现了此功能。但考虑到CPU的利用率及程序的高并发问题,需要将线程控制方式由轮询改为触发的方式。
本人所谓的轮询即是在控制线程类ControlThread中的run方法进行无限循环,在此循环中进行队列元素个数的监视及sleep操作。
而本人希望采用的触发方式则是当队列元素个数不断增长,涨到200时,则通过发送一个信号给控制线程ControlThread,ControlThread才会进行一次run方法。
你看看Scala的Actor类,如果你做的是项目,建议直接用Scala,反正可以随便调用java的class。
你说的方式,应该是处理并发比较好的办法了。轮询肯定是效率最差的那种了。
目前Java,你可以使用wait和notifyAll来模拟我说的Actor,不知道效率会怎么样。
其实考虑到实际操作系统的特性,Windowss的消息机制,就是一个很好的例子。
队列类持有控制线程的引用,每put一个数据到队列中时都检查一下当前队列的大小,如果发现
达到200,则调用控制线程去处理。
其实就是将你上面轮询的做法反过来,你原来用线程轮询监视队列中的大小,现在是队列自己去
监视自己,达到一定要求就通知处理线程去处理。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者