java - 字符串缓冲区线程安全
问题描述
众所周知,StringBuffer 在 Java 中是线程安全的,这意味着它提供了对多个线程的同步访问。但是当我运行下面的代码时,它与同步块中的运行不同。我在这里缺少什么?
class Hackerearth{
static StringBuffer s = new StringBuffer("String Buffer Multithreading test");
public static void main(String args[] ) throws Exception {
Thread t1 = new Thread(new Runnable(){
public void run(){
Thread1();
}
});
Thread t2 = new Thread(new Runnable(){
public void run(){
Thread2();
}
});
t1.start();
t2.start();
}
public static void Thread1(){
for(int i = 0; i < s.length(); i++){
s.setCharAt(i, ((char) ((int) (Math.random() * 26) + 97)));
System.out.println("Thread is: " + Thread.currentThread().getName() + ".S is: " + s);
if(i == s.length() - 1){
try {
Thread.sleep(2000);
s = new StringBuffer("String Buffer Multithreading test");
} catch (InterruptedException ex) {
System.out.println(ex.getMessage());
}
}
}
}
public static void Thread2(){
for(int i = 0; i < s.length(); i++){
s.setCharAt(i, ((char) ((int) (Math.random() * 26) + 97)));
System.out.println("Thread is: " + Thread.currentThread().getName() + ".S is: " + s);
if(i == s.length() - 1){
try {
Thread.sleep(2000);
s = new StringBuffer("String Buffer Multithreading test");
} catch (InterruptedException ex) {
System.out.println(ex.getMessage());
}
}
}
}
解决方案
推荐阅读
- python - 无法使用 import mysql.connector ,已成功安装 Connector/Python for MySQL
- nestjs - nestjs上传文件和图片系统
- html - Outlook 桌面应用程序上的 HTML 表格未格式化为其他电子邮件服务
- firebase - 在 firebase firestore 中查找字段 a=value x 或字段 b = value x 的文档
- android - Flutter Webview - 如何在页面上添加更多链接或元素?
- laravel - laravel admin登录后,如何更改到其他页面?
- javascript - 导入 Moment.js 使 webpack 构建失败
- windows - CFont::FromHandle(HFONT) 是否承担 HFONT 的所有权?
- python - 从图片中剪切颜色
- python-3.x - 在一张图中重叠条形图