作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
1)使用场景:一个对象可能要访问共享资源来完成它所要提供的服务,在多线程情况下,多个这样的对象在一起就会产生意想不到的后果,比如竞争。监视器就是在这样的一个对象上设置一个锁,以保证在给定时间内,只有一个线程可以执行这个对象上的任何一个方法。
2)例子:我们创建一个日志记录的类
public class FileLogger {
public synchronized void log(String msg) {
DataOutputStream dos = null;
try {
dos = new DataOutputStream(
new FileOutputStream("log.txt”,true));
dos.writeBytes(msg);
dos.close();
} catch (FileNotFoundException ex) {
//
}
catch (IOException ex) {
//
}
}
}
当一个线程执行到一个对象的同步方法时,它就得到这个对象的一个锁,在这个方法执行时这个线程就持有这个锁知道方法运行结束,期间其他线程无法拿到这个锁,也就无法执行这个方法了。当然同步方法是以运行速度开销作为代价的。