我想知道StringBuilder & StringBuffer類與他們實際使用的區別。所以,我寫了2個代碼片段,其中我使用StringBuilder & StringBuffer對象同時產生3個線程。爲什麼StringBuilder訪問似乎是同步的?
當我運行代碼時,我希望所有3個線程在StringBuilder的情況下同步運行,以StringBuffer的情況以同步的方式運行。但是在這兩種情況下,它們都以同步方式運行。 那麼StringBuffer類有什麼用?:confused:
(在String對象的情況下,所有3個線程同時運行)。我將分享代碼片段供您參考。如果我在理解多線程本身的概念方面錯誤,也請糾正我。並請更正代碼。
// StringBuilder...
public class MultiTread implements Runnable{
private StringBuilder name;
public MultiTread(StringBuilder string){
name=string;
}
public void run(){
for(int i=0; i<=10; i++){
System.out.println(name.append(i));
}
}
public static void main(String[] args){
Thread th = new Thread(new MultiTread(new StringBuilder("thread1:")));
Thread th1 = new Thread(new MultiTread(new StringBuilder("thread2:")));
Thread th2 = new Thread(new MultiTread(new StringBuilder("thread3:")));
th.start();
th1.start();
th2.start();
}
}
..................
//StringBuffer...
public class MultiTreadBuf implements Runnable{
private StringBuffer name;
public MultiTreadBuf(StringBuffer string){
name=string;
}
public void run(){
for(int i=0; i<=10; i++){
System.out.println(name.append(i));
}
}
public static void main(String[] args){
Thread th = new Thread(new MultiTreadBuf(new StringBuffer("thread1:")));
Thread th1 = new Thread(new MultiTreadBuf(new StringBuffer("thread2:")));
Thread th2 = new Thread(new MultiTreadBuf(new StringBuffer("thread3:")));
th.start();
th1.start();
th2.start();
}
}
........
//String....
public class MuiltiTreadStr implements Runnable{
private String name;
public MuiltiTreadStr(String string){
name=string;
}
public void run(){
for(int i=0; i<=10; i++){
System.out.println(name+i);
}
}
public static void main(String[] args){
System.out.println("main begins...");
Thread th = new Thread(new MuiltiTreadStr("thread1:"));
Thread th1 = new Thread(new MuiltiTreadStr("thread2:"));
Thread th2 = new Thread(new MuiltiTreadStr("thread3:"));
System.out.println("spawning 3 threads...");
th.start();
th1.start();
th2.start();
System.out.println("main ends...");
}
}
谷歌,第一個結果是:http://stackoverflow.com/questions/355089/stringbuilder-and-stringbuffer-in-java – Enigma