Java 并行工作时在抽象类中混合数据
我的抽象类有一个问题,我有一个大约2000个用户的应用程序,很多人同时调用不同的类,这些类共享一个抽象类Java 并行工作时在抽象类中混合数据,java,oop,jpa,Java,Oop,Jpa,我的抽象类有一个问题,我有一个大约2000个用户的应用程序,很多人同时调用不同的类,这些类共享一个抽象类 class A extends B{ //Code } 在我的抽象类中,当我接收到一些方法的参数时,就会产生不便,在这种情况下,所有类都会调用这些方法 class abstract B { public int getResult(int b){ return b+1; } } class C extends B { public int g
class A extends B{
//Code
}
在我的抽象类中,当我接收到一些方法的参数时,就会产生不便,在这种情况下,所有类都会调用这些方法
class abstract B {
public int getResult(int b){
return b+1;
}
}
class C extends B {
public int getValue(int a){
int b = getResult(a);
int c = b * 2 / 4;
return c + 150;
}
}
当几个人并行地进入类“C”并向方法传递不同的参数时,getResult最终会混合发送的数据,并在执行过程中返回错误的数据
我发现的选项是在每个类中实现getResult方法,但这使我在每个类中重复代码,大约有200个类实现了这个抽象类
class A extends B{
//Code
}
我读过关于封装的文章,我可以避免这种情况,但我不知道这是否是一种选择,因为我还没有研究过它
我使用了synchronized,但它造成了许多瓶颈,响应时间也增加了。我认为您需要在getValue方法中使用synchronized来管理对yout方法的并行访问。也许这篇文章可以帮助你,还有一个简单的例子:
abstract class B {
public int getResult(int b){
return b+1;
}
}
class C extends B {
public synchronized int getValue(int a){
int b = getResult(a);
int c = b * 2 / 4;
return c + 150;
}
}
我想你说的是并发,不是封装。是的,没错。但在阅读有关主题时,我已经阅读了封装的一部分,但如果我对我想要实现的目标感到困惑,请理解如何解决。在您的示例中,没有一个类具有任何状态。那么,你的方法怎么会混合结果呢?请澄清我的类是由JPA调用的,所以当它们被调用时,它们会调用我在类中显示的方法,但是我把数据搞混了,我不知道是否清楚。我忘了评论我已经使用了同步的,但我认为这是一个瓶颈,因为同时有这么多请求,但我感谢您的帮助,并将纠正这个问题,因为我没有提到同步器的问题