多线程应用程序中的静态方法

时间:2013-12-23 07:16:15

标签: java static

我在一个类中有一个函数,它只掩盖输入的卡号。我已经使它成为synchronized因为,我不希望多个线程同时调用我的maskcard功能。我的问题是,我应该使这个功能static更有效和干净吗?现在,无论我在哪里调用我的maskcard函数,我都在调用一个实例。

public class CardMasker {

    public synchronized String maskCardNumber(String cardNumber)
    {
        ..
        ..
    }

}

3 个答案:

答案 0 :(得分:1)

我保持特定方法实例,即您当前实现它的方式:

public synchronized String maskCardNumber(String cardNumber)

此处所有在同一实例上工作的线程都将以同步方式访问该方法。

如果您想要static synchronized,请注意以下几点:

  • 是否执行需要以同步方式访问的操作,而不管此类的任何实例。如果是,则没有必要保持它特定于实例,因为使用此类的不同实例的线程仍然可以同时调用该方法。

答案 1 :(得分:1)

更好的解决方案是确保您只有一个CardMasker实例并使用非静态同步的maskCardNumber。

答案 2 :(得分:1)

  

我的问题是,我应该将此功能设为静态以提高效率和清洁度吗?

没有。它不会提高效率。速度的差异(如果有的话)可以忽略不计。

此外,如果您再创建方法synchronized,则会产生并发瓶颈。这不需要在非static情况下发生;例如,如果你抵制使用单身人士“节省空间”(或其他东西)的诱惑。实际上,如果每个线程都有自己的实现此辅助方法的类的线程限制实例,那么该方法可能根本不需要同步。

此外,这是一个问题或意见,但静态方法并不比实例方法更“干净”。