作者:
出处: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) { // } } }当一个线程执行到一个对象的同步方法时,它就得到这个对象的一个锁,在这个方法执行时这个线程就持有这个锁知道方法运行结束,期间其他线程无法拿到这个锁,也就无法执行这个方法了。当然同步方法是以运行速度开销作为代价的。
作者:
出处: