sinat_25136209
sinat_bond
采纳率39.6%
2017-02-07 03:41

关于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条回答

  • bjjoy2009 迷茫猿小明 4年前

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

    点赞 1 评论 复制链接分享
  • zxt1005759639 狮子望月 4年前
    点赞 评论 复制链接分享
  • sinat_25136209 sinat_bond 4年前

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

    点赞 评论 复制链接分享
  • zzhao114 Z. ZHANG 4年前

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

    点赞 评论 复制链接分享