private static String s1 = "筷子左";
private static String s2 = "筷子右";
public static void main(String[] args) {
new Thread() {
public void run() {
while(true) {
synchronized(s1) {
System.out.println(getName() + "...拿到" + s1 + "等待" + s2);
synchronized(s2) {
System.out.println(getName() + "...拿到" + s2 + "开吃");
}
}
}
}
}.start();
为什么这里的同步代码块的能是变量?
private static String s1 = "筷子左";
private static String s2 = "筷子右";
synchronized(object),里边是object类型的,java所有类都继承自Object类。
同步锁不是对象锁和类锁么。。。。s1、s2同时也是对象啊。。。。String是一个封装类啊,,,
后来百度发现
其实对象和引用变量的概念其实很模糊
不知道能不能把有指向的引用变量直接当做对象来用。
模糊,你最好看看jvm的原理http://www.cnblogs.com/ziysong/p/4652921.html,然后看这个http://www.tuicool.com/articles/b6jUVn