Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 并行工作时在抽象类中混合数据_Java_Oop_Jpa - Fatal编程技术网

Java 并行工作时在抽象类中混合数据

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

我的抽象类有一个问题,我有一个大约2000个用户的应用程序,很多人同时调用不同的类,这些类共享一个抽象类

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方法的并行访问。也许这篇文章可以帮助你,还有一个简单的例子:

  • 注B类在类之前必须有u“abstract”关键字
  • 在getValue方法中添加“synchronized”
  • 这样:

    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调用的,所以当它们被调用时,它们会调用我在类中显示的方法,但是我把数据搞混了,我不知道是否清楚。我忘了评论我已经使用了同步的,但我认为这是一个瓶颈,因为同时有这么多请求,但我感谢您的帮助,并将纠正这个问题,因为我没有提到同步器的问题