一个方法里面将进行IO操作,
如何保证同时只有一个线程能使用该方法里面的资源?例如:
class TestM {
public TestM() {}
public void TestMethod() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = null;
System.out.println("Enter your value:");
str = br.readLine();
System.out.println("your value is :" + str);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/*
synchronized TestMethod(){..}不行,当创建多个对象时,每个对象调用该方法都可以到达  TestMethod()内部
*/ (如何在线程里面同步  或者在TestM里面弄个锁对象?)
回答望给代码实例,谢谢

解决方案 »

  1.   

    class TestM {
    private static String lock="lock";
    public TestM() {}
    public void TestMethod() {
    synchronized(lock) {
    try {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String str = null;
    System.out.println("Enter your value:");
    str = br.readLine();
    System.out.println("your value is :" + str);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    }
      

  2.   

    既然知道要个锁,但又不能挂在某个具体的实例上,那就挂在 静态的东西上或者 其他的 全局的东西, 比如 文件锁。 J2SE4 NIO 中有个 FileLock 。