0

StringBuilder と StringBuffer クラスの違いとその実用的な使い方を知りたかったのです。そこで、StringBuilder と StringBuffer オブジェクトを使用する 3 つのスレッドを同時に生成する 2 つのコード スニペットを作成しました。

コードを実行すると、StringBuilder の場合は 3 つのスレッドすべてが同時に実行され、StringBuffer の場合は同期された方法で実行されると予想されます。ただし、どちらの場合も、同期して実行されます。それでは、StringBuffer クラスの使用は何ですか?:混乱:

(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...");
}
} 
4

3 に答える 3

8

スレッドごとに StringBuffers と StringBuilders の異なるインスタンスを使用しています。同期を確認するには、すべてのスレッドでオブジェクトの同じインスタンスを使用する必要があります;-)

于 2013-10-09T06:27:19.067 に答える