经过我认真验证,证实在多线程模式下 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();
   }
  }
 }来自: http://blog.csdn.net/DancingCalf