与 Singleton 类类似,我想创建一个 Fiveton 类,它最多可以创建该类的 5 个实例。不同的线程正在尝试访问此类的实例(因此需要提供 getInstance 方法)。然而,类很重,因此不能急于创建实例,即按需创建。
另外一个约定是,线程以循环方式分配实例,即线程 1、6、11 获取 Fiveton 对象的实例 1。如果某个线程正在使用该实例,则它们会等待该锁(线程 6 和 11 可能会等待实例 1,并且线程 11 可能会获得该锁,但在任何情况下线程 11 都不应该获得实例 2)。同样,线程号。 2、7、12 应该得到实例 2。
最佳答案
不要在类本身中编写该代码*,而是使用对象池。
一个很好的入门库是 Apache Commons / Pool
另一个我不知道但声称更快的是 furious-objectpool
使用提供的实现之一或使用库作为构建您自己的自定义池的基础。
* 为什么不将其编码到类本身中?因为类的作用和如何访问类的实例是不相关的问题。类(class)应该专注于其核心目的,而不是 self 管理。
关于java - 设置一个 Fiveton 类,以供不同线程以循环方式访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15919839/