Java SynDemo对象刚一出现的时候有很多程序员都很头痛其实这是完全没有必要的下面我们就来详细的学习下有关的相关问题我们发现对于Java SynDemo对象只有synMethord运行了而synMethord却没有运行
这是应为在方法级别的synchronized声明将lock这个类对象的当前实例所以在synMethord运行结束unlock之前当前Java SynDemo对象实例是无法运行synMethord的这种方法级别的synchronized声明和以下的做法是等同的
package blogsgpcuster;/** * * @author AaronGuo * */
public class SynDemo { public void synMethord() {
synchronized (this) { while (true) { try { Threadsleep();
Systemoutprintln(synMethord); } catch (InterruptedException
e) { // TODO Autogenerated catch block
eprintStackTrace();
}
}
}
}
public void synMethord() { synchronized (this) { while (true)
{ try { Threadsleep(); Systemoutprintln(synMethord); }
catch (InterruptedException e) { // TODO Autogenerated catch block
eprintStackTrace();
}
}
}
}
}
运行程序结果与上次相同
如果我们希望分别同步个方法该如何处理?可以参考这个实现
package blogsgpcuster;/** * * @author AaronGuo * */
public class SynDemo { private Object flag = new Object();
private Object flag = new Object(); public void synMethord()
{ synchronized (flag) { while (true) { try { Threadsleep();
Systemoutprintln(synMethord); } catch (Interrupted
Exception e) { // TODO Autogenerated catch block
eprintStackTrace();
}
}
}
}
public void synMethord() { synchronized (flag) { while (true)
{ try { Threadsleep(); Systemoutprintln(synMethord); }
catch (InterruptedException e) { // TODO Autogenerated catch block
eprintStackTrace();
}
}
}
}
}
运行程序结果如我们预期
main
synMethord
synMethord
main
synMethord
main
synMethord
synMethord
关于Synchronized还有一些其他的话题如static的问题继承的问题与volatile搭配使用等等在网上都有很详细的说明这里就不重复介绍了 以上就是对Java SynDemo对象的详细介绍