我有一个应用程序,我有一些重物,我想将对象创建限制为某个x数字(它不会影响我的应用程序)。怎么做?
答案 0 :(得分:4)
修改单例模式。您可以使用计数变量。您需要保持Constructor的私密性以控制no。实例。
答案 1 :(得分:0)
您可以使用Active Object Pattern作为标准池的替代方案。
由于您需要一些此类对象,因此对象可能会保持状态。
因此,您可以拥有通过某个代理向其发送请求的活动对象列表。
想法如下:
1)有“调度程序”,最简单的形式是等待阻塞队列并逐个处理请求的线程。注意如何执行方法运行,而不是thread.start()。
2)您有阻塞服务的队列,您可以将“(调度程序”)线程选择的请求分派到该队列。
3)您的Active Object公开由Scheduler处理的服务。
接下来,您可以将这些活动对象的静态列表包装在某个代理服务器后面,该代理服务器负责通过循环或其他任何平衡策略将请求委托给您的活动对象。
以下是维基百科的一个例子:
class BecomeActiveObject
{
private double val = 0.0;
private BlockingQueue<Runnable> dispatchQueue
= new LinkedBlockingQueue<Runnable>();
//
public BecomeActiveObject()
{
new Thread(
new Runnable()
{
@Override
public void run()
{
while (true)
{
try
{
dispatchQueue.take().run();
} catch (InterruptedException e)
{ // okay, just terminate the dispatcher
}
}
}
}
).start();
}
//
void doSomething() throws InterruptedException
{
dispatchQueue.put(
new Runnable()
{
public void run() { val = 1.0; }
}
);
}
//
void doSomethingElse() throws InterruptedException
{
dispatchQueue.put(
new Runnable()
{
public void run() { val = 2.0; }
}
);
}
}