2013-03-03 78 views
4

我需要建议,或者将自定义java方法设置为静态或通过适配器中的java对象访问?Worklight:调用java静态方法vs创建对象的性能

我的场景是:成千上万的用户正在进行交易,每个用户再次访问同一个方法&,只需更改某些特定于该用户或交易的值。

现在,如果我让他们为静态方法,然后将它会给用户带来问题,因为我们知道适配器调用是异步....所以,如果多个用户在同一时间调用同样的方法再将它引起的问题是为对方返回不同的值?

或者如果我通过第一个宣称类对象,然后访问方法,提供参数....所以以这种方式,当多个用户在同一时间访问相同的方法,那么他们将获得适当的访问所有定制的Java方法/相关数据?

但从其做法是好的,做的静态方法的方法带来错误的数据给用户.....一个用户的数据到另一个,和其他人对另一个人的表现点。

感谢 阿卜杜勒·阿哈德

------------我的代码是这样---

java code: 

    public static String getBalanceSummaries(String userAct){ 
      String replyMsg=""; 
    try { 

    replyMsg = getBalanceStatementfromMQ(userAct); 

    }catch(Exception e) {} 

    return replyMsg; 

    } 

    -----WL Adapter code:------ 

    function showAllBalace(userActNo){ 
     return{ 
      result: com.my.package.getBalanceSummaries(userActNo) 
     }; 
    } 
+0

这一切都取决于你的方法做什么和它如何与对象的成员进行交互(如果有的话)。 如果你只是一个简单的'公共静态双添加(双a,双b){返回a + b; }'那么你当然可以通过多线程并行使用它。现在,如果多个用户通过WL适配器同时访问它,所以它会带来不同的效果,你在做什么,将有助于 – 2013-03-03 07:49:59

+0

@AviramSegal是的,它类似于像“公共静态字符串getMyBalanceMessages(字符串userAct){返回xmlBalanceStatements}”的更多信息?或者它会带来正确的结果.....因为适配器调用是异步的.. .thanks – AAhad 2013-03-03 08:09:10

+0

如何定义xmlBalanceStatements?这是一个常数吗?因为你根本不使用它,所以'userAct'参数有什么意义?让我们真实的代码。代码很重要。 – 2013-03-03 08:11:17

回答

2

我相信你是混淆了静态领域的静态方法。静态方法只是与对象的任何特定实例无关的代码 - 基本上,任何未使用thissuper引用的方法都可能成为静态的候选对象,前提是它们不覆盖另一个方法并且不打算成为覆盖。静态方法没有任何额外的关注w.r.t.多线程与“正常”方法相比。

静态字段另一方面,根据定义在所有线程之间共享,并且应该像使用任何共享资源一样保护对它们的访问。 任何使用静态字段的方法应检查并发问题,而不管方法本身是否为静态方法。

就性能而言,有一些有趣的证据表明静态方法可以提供与普通虚拟方法相比的性能改进,但老实说,我不会担心它,直到探查器告诉我为止。过早的优化是所有罪恶的根源...

+0

是的,我知道区别。但我不知道WL Adapters如何在内部处理它们。例如,如果我访问适配器中的静态方法,或者如果我首先创建对象然后访问方法......将以同样的方式在内部处理......用同样的方式打电话当并发用户访问他们? Bcz如果先创建对象然后再访问方法,那么每次创建一个对象就是GC的开销。但另一方面,如果多个用户在WL适配器中访问静态方法,那么它会给出不同的结果还是NOT? Worklight适配器如何与java进行交互。谢谢 – AAhad 2013-03-03 08:18:15