我只是想直观地看到它们之间的区别,所以下面是代码。但它总是失败。有人可以帮我吗?我也看到过关于 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:如果有人有您的代码显示差异,我很乐意接受它作为答案。因为我不确定即使修改了我的代码是否可以实现差异。