2011-07-06 5 views
8

我々はいくつかのスレッドが、次のような静的メソッドを呼び出すシナリオを持っている:同時アクセス

public static boolean isEmpty(final String s) { 
    return s == null || s.length() < 1; 
} 

100件のスレッドがそれを呼び出す場合には、不整合の問題を引き起こす可能性が?

+1

's.length()== 0 'は' sのより安いがあってはならない他の方法で定義されているものはありません.length()<1'であり、Stringの長さはゼロ未満ではありません。 – sudocode

+1

@sudocodeまたは 'String.isEmpty'を使用してください。 –

答えて

19

いいえこれは、並行性の問題がありません。

1)あなたが渡すパラメータは不変クラスである文字列(その値を変更できない)

2)であり、この方法は、任意の共有状態を変更しようとしない

+0

パラメータが変更可能であれば違いますか?例えば、関数のシグネチャが 'public static boolean isEmpty(String s){...}'の場合、 – broadband

4

方法ありません共有状態にはアクセスしません。したがって、いいえ、問題は発生しません。

4

いいえ、共有状態がないためです。このメソッドを同じ文字列sで呼び出しても、Stringは不変でスレッドセーフなので、それでも安全です。

BTW StringUtils.isEmpty() Apache Commonsのメソッドも同じことをします。

0

「がS」は、渡された変数であることと、それを呼び出す100件のスレッドの場合には問題

関連する問題