我只是想直觀地看到它們之間的區別,所以下面是代碼。但它總是失敗。有人可以幫助我嗎?我也看到了關於這些問題,但他們都沒有以編程方式顯示其差異。測試StringBuilder和StringBuffer之間的區別
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();
}
}
當我執行此操作時,我有時會以隨機方式得到輸出,所以這證明了我的測試。但是,當我甚至用StringBuffer
替換StringBuilder
並測試時,即使它給了我意想不到的輸出(而不是從1到200的順序)。那麼有人能幫助我從視覺上了解這種差異嗎?
P.S:如果任何人有你的代碼顯示差異,我會很高興接受它作爲答案。因爲我不確定即使修改了我的代碼是否可以實現與我的代碼的區別。
對不起,此測試不起作用。你能否以另一種方式提出建議? – Apparatus 2013-03-08 04:53:50
@Sam:「沒有工作」對我來說太過模糊,無法幫助你。請更精確。 – 2013-03-08 04:56:01
我測試了[this](http://pastebin.com/DbrHc2yD)的方式,它沒有顯示出任何區別。在這兩種情況下,我都會在使用StringBuilder和StringBuffer進行測試時獲取非同步輸出。 – Apparatus 2013-03-08 05:01:27