java - 设置一个 Fiveton 类,以供不同线程以循环方式访问

标签 java multithreading

与 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/

相关文章:

java - 在二叉搜索树中寻找中序后继

java - 生成 Google map 发布 key

c++ - Qt QTcpSocket() readReady 信号在多线程服务器应用程序中永远不会触发(插槽从未被调用)。 waitForReadyRead() 方法工作正常

multithreading - GHC 如何识别一个线程是 BlockedIndefinitelyOnMVar?

c++ - C , C++ 非同步线程返回一个奇怪的结果

java - 我的投票系统已经很好但是

java - 列表上的空对象引用

java - maven:无法覆盖 tomcat 服务器的 server.port

c - 多线程计算矩阵乘积的时间成本

C线程值得重用吗?