关于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 = "筷子右";

4个回答

synchronized(object),里边是object类型的,java所有类都继承自Object类。

同步锁不是对象锁和类锁么。。。。s1、s2同时也是对象啊。。。。String是一个封装类啊,,,

后来百度发现
其实对象和引用变量的概念其实很模糊
不知道能不能把有指向的引用变量直接当做对象来用。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐