我已经在java中实现了一个java版本的生产者&&消费者模式,我注意到我的解决方案是静态的!!
准确地说,我在主测试中拥有代码,例如示例 4 中我有 1 个生产者(读取文件的一大块并将其放入缓冲区)和许多*消费者(从缓冲区保留 block ):
Producer master= new Producer();
Consumer one= new Consumer();
Consumer two= new Consumer();
Consumer three= new Consumer();
Consumer four= new Consumer();
master.start();
one.start();
two.start();
three.start();
four.start();
让我们ROCCccccck..
所以一切都好,但是,我想实现一种动态方式,在所有启动之前建立消费者的数量......如果我计算java代码??:
long usableFreeMemory= Runtime.getRuntime().maxMemory()-Runtime.getRuntime().totalMemory()
+Runtime.getRuntime().freeMemory();
我获取了JVM的空闲内存??或计算机的可用内存(RAM)??
之后我获得了空闲内存,我如何知道我需要多少个消费者(线程)来计算一个大文件的解析?我可以使用哪个数学公式来创建必要的线程?
谢谢..
最佳答案
作为创建消费者数量的策略,我建议您检查 Runtime.availableProcessors()。这个方法会告诉你“...Java虚拟机可用的处理器数量”。 (来自 JavaDoc)。我将此作为最佳方法提交,因为如果您的消费者多于可用处理器,那么超过该点的任何消费者都必须等待另一个消费者进入休眠状态才能进入休眠状态,因此无论如何您实际上都有 numProcessors 消费者。
for(int i=0;i<Runtime.numProcessors();i++){
new Consumer().start();
}
当然,如果您的程序是分布式的,您可以为每台机器上的每个处理器启动一个消费者。
关于java - 动态创建Consumer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4661403/