经过我认真验证,证实在多线程模式下 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();
}
}
}