我在一个类中有一个函数,它只掩盖输入的卡号。我已经使它成为synchronized
因为,我不希望多个线程同时调用我的maskcard功能。我的问题是,我应该使这个功能static
更有效和干净吗?现在,无论我在哪里调用我的maskcard函数,我都在调用一个实例。
public class CardMasker {
public synchronized String maskCardNumber(String cardNumber)
{
..
..
}
}
答案 0 :(得分:1)
我保持特定方法实例,即您当前实现它的方式:
public synchronized String maskCardNumber(String cardNumber)
此处所有在同一实例上工作的线程都将以同步方式访问该方法。
如果您想要static synchronized
,请注意以下几点:
答案 1 :(得分:1)
更好的解决方案是确保您只有一个CardMasker实例并使用非静态同步的maskCardNumber。
答案 2 :(得分:1)
我的问题是,我应该将此功能设为静态以提高效率和清洁度吗?
没有。它不会提高效率。速度的差异(如果有的话)可以忽略不计。
此外,如果您再创建方法synchronized
,则会产生并发瓶颈。这不需要在非static
情况下发生;例如,如果你抵制使用单身人士“节省空间”(或其他东西)的诱惑。实际上,如果每个线程都有自己的实现此辅助方法的类的线程限制实例,那么该方法可能根本不需要同步。
此外,这是一个问题或意见,但静态方法并不比实例方法更“干净”。