我们当前的课程作业指定我们应该使用"Object pool Manager“设计模式为线程池创建一个管理器,该设计模式会产生一定数量的线程。这些线程的所有权应该转移到客户端,然后在客户端使用完它之后返回到池中。如果池中不存在线程,则客户端必须等待。 我的困惑来自于这样一个事实,即线程应该是不可重用的,这违背了将它们汇集在一起的目的。我对作业的理解有误吗?
我用Java和C++运行了小型测试,创建了大量非常小的对象(没有类成员,构造函数中也没有),而且Java明显更快(我的意思是C++似乎真的很慢)。我打赌这与JVM有关,但是用哪种方式呢?
编辑:
我在C++中使用的类是这样的(正如我所说的,没有类成员,在构造函数中什么也不做):
class foo{
public:
foo(){}
~foo(){}
}
在Java中:
public class Foo{
public Foo(){}
}
我做的小测试只是关于在循环中分配成吨的对象(大约1000000000个)。我通过OpenJDK实现使用了GCC
我非常熟悉对象池的概念,我总是尽可能多地使用它。
此外,我一直认为对象池是标准规范,因为我观察到Java本身以及其他框架尽可能多地使用池。
最近,我读到了一些全新的东西(而且违反直觉?)对我来说。
这种池实际上使程序性能更差,特别是在并发应用程序中,因此最好实例化new对象,因为在较新的JVM中,对象实例化非常快。
我在书中读到了这个:Java Concurrency in Practice
现在,我开始思考,如果我在书的第一部分建议使用Executors重用Threads,而不是创建新的实例时,我在这里发现了一些问题。
那么,对象池已经过时了吗?