关于java线程中的一个小问题


            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