在 java 中限制在多线程中创建对象
Limiting creation Of Object in multithreading in java
在采访中 question
被问到。
我们有 10 thread
,我们有 100 task
。每个任务板条箱 Objects
。当资源被高度使用时,我们必须限制 Object creation
的数量。他们问
- 你将如何识别因为这么多
object getting created
所以你的资源被高度使用。
- 当资源使用率很高时,您将如何限制
creation of object
。
- 因为很多
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");
}
}
}
在采访中 question
被问到。
我们有 10 thread
,我们有 100 task
。每个任务板条箱 Objects
。当资源被高度使用时,我们必须限制 Object creation
的数量。他们问
- 你将如何识别因为这么多
object getting created
所以你的资源被高度使用。 - 当资源使用率很高时,您将如何限制
creation of object
。 - 因为很多
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");
}
}
}