经过我认真验证,证实在多线程模式下 String.format有严重问题,原因未完全明确,我猜想有2可能:
1、使用StringBuilder来实现,该类非线程安全
2、可能使用了全局数据区,但没加锁定该数据区就读写
private static class MyReader extends Thread {
@Override
public synchronized void run() {
try {
while (true) {
try {
rw.readLock().lock();
rn++;
sleep(200);
String.format("test"); //出现问题
} finally {
rn--;
rw.readLock().unlock();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
本文通过实验发现,在多线程环境下使用String.format存在严重问题。疑似原因包括StringBuilder的非线程安全性及可能存在的全局数据区未加锁读写操作。提供了一个简单的测试示例。

1384

被折叠的 条评论
为什么被折叠?



