それらの違いを視覚的に確認したいので、以下にコードを示します。しかし、それは常に失敗します。誰かがこれについて私を助けてくれますか?SOに関する質問も見ましたが、プログラムで違いを示したものはありません。
public class BBDifferencetest {
protected static int testnum = 0;
public static void testStringBuilder() {
final StringBuilder sb = new StringBuilder();
Thread t1 = new Thread() {
@Override
public void run() {
for (int x = 0; x < 100; x++) {
testnum++;
sb.append(testnum);
sb.append(" ");
}
}
};
Thread t2 = new Thread() {
public void run() {
for (int x = 0; x < 100; x++) {
testnum++;
sb.append(testnum);
sb.append(" ");
}
}
};
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Result is: " + sb.toString());
}
public static void main(String args[]) {
testStringBuilder();
}
}
これを実行すると、ランダムに出力が得られることがあるので、これは私のテストを証明しています。しかし、私が置き換えStringBuilder
てStringBuffer
テストするときでさえ、それでさえ私に予期しない出力を与えます(1から200までのシーケンシャルではありません)。それで、誰かが私が違いを視覚的に知るのを手伝ってくれるでしょうか?
PS:誰かが違いを示すあなたのコードを持っているなら、私はそれを答えとして受け入れてとてもうれしいです。コードを変更しても、コードとの違いを実現できるかどうかわからないためです。