多线程操作同一个字符串相加,用StringBuilder
时间: 2023-07-24 11:26:12 浏览: 65
在多线程操作同一个字符串时,使用StringBuilder是一个比较好的选择。StringBuilder是线程安全的,可以保证多个线程同时调用它的方法时不会出现线程安全问题。
使用StringBuilder进行字符串的拼接可以提高效率,因为它的内部实现是可变的字符数组,可以避免频繁地创建新的字符串对象。多个线程同时调用StringBuilder的append()方法时,可以同时修改字符数组,避免了线程之间的竞争。
下面是一个使用StringBuilder进行字符串拼接的示例代码:
```
public class StringBuilderDemo implements Runnable {
private StringBuilder sb;
public StringBuilderDemo(StringBuilder sb) {
this.sb = sb;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
sb.append(Thread.currentThread().getName() + " ");
}
}
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
Thread t1 = new Thread(new StringBuilderDemo(sb));
Thread t2 = new Thread(new StringBuilderDemo(sb));
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(sb.toString());
}
}
```
在上面的示例代码中,我们创建了两个线程,分别调用StringBuilderDemo的run()方法,在run()方法中使用StringBuilder进行字符串拼接。最后,我们在主线程中输出StringBuilder对象的值。
需要注意的是,虽然StringBuilder是线程安全的,但是在多个线程同时进行字符串拼接时,也可能会出现线程安全问题,需要使用同步机制来保证线程安全。例如,在上面的示例代码中,我们使用了join()方法来等待两个线程执行结束,并且在主线程中输出了StringBuilder对象的值,保证了线程安全。