为什么StringBuilder访问似乎是同步的?

Psl*_*Psl 0 java multithreading

我想知道StringBuilder和StringBuffer类之间的区别以及它们的实际用途.所以,我编写了2个代码片段,其中我同时产生了3个线程,这些线程使用了StringBuilder和StringBuffer对象.

当我运行代码时,我希望所有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...");
}
} 
Run Code Online (Sandbox Code Playgroud)

ang*_*rro 8

您正在为每个线程使用StringBuffers和StringBuilders的diferents实例.要查看同步,必须在所有线程中使用相同的对象实例;-)