在 java 中限制在多线程中创建对象

Limiting creation Of Object in multithreading in java

在采访中 question 被问到。

我们有 10 thread,我们有 100 task。每个任务板条箱 Objects。当资源被高度使用时,我们必须限制 Object creation 的数量。他们问

  1. 你将如何识别因为这么多 object getting created 所以你的资源被高度使用。
  2. 当资源使用率很高时,您将如何限制 creation of object
  3. 因为很多object getting created,当它们变得闲置时,gc()也在行动。有时它会抛出错误 gc used exceeded.

我试过了,但无法正确回答。他们拒绝了。

你能指导我想出解决办法吗?我的意思是我什至没有得到它的线索。

如果您创建的对象属于特定 class,您可以在该 class 中使用静态变量来保存已创建实例的数量。例如,您可以使用 AtomicInteger 来保存已创建实例的数量,这样您就不需要手动同步对该变量的访问。

您可以限制查看该变量的实例数,您可以在调用新运算符之前或在调用它查看 AtomicInteger 的当前值之前执行此操作

代码可以类似于:

 public MyClass {
     private static AtomicInteger counter = new AtomicInteger(0);

     public MyClass() {
         if (counter.getAndIncrement() > 100000) {
             throw new RuntimeException("More than 100000 objects created");
         }
     }

 }