首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以下示例:同步整数无效

以下示例:同步整数无效
EN

Stack Overflow用户
提问于 2022-01-14 11:38:23
回答 1查看 55关注 0票数 -1

myCode如下所示:

我想知道为什么张三和李信都可以打印:李四9锁对象:1522503870张三9锁对象:1522503870

代码语言:javascript
运行
复制
public class TicketConsumer implements Runnable {
    private Integer i;

    public TicketConsumer(int i) {
        super();
        this.i = i;
    }

    @Override
    public void run() {
        while (true) {
           
            System.out.println(Thread.currentThread().getName() + i + "锁对象before:" + System.identityHashCode(i));
            
            synchronized (i) {
                System.out.println(Thread.currentThread().getName() + i + "锁对象:" + System.identityHashCode(i));
                if (i > 0) {
                    try {
                        Thread.sleep(100);    // 模拟抢票延迟
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName() + "抢到了第" + i-- + "张票");
                } else {
                    return;
                }
            }
        }
    }

    public static void main(String[] args) {
        TicketConsumer ticket = new TicketConsumer(new Integer(10));
        Thread t1 = new Thread(ticket, "张三");
        Thread t2 = new Thread(ticket, "李四");
        t1.start();
        t2.start();
    }
}

结果是:

代码语言:javascript
运行
复制
张三10锁对象before:1417180225
李四10锁对象before:1417180225
张三10锁对象:1417180225
张三抢到了第10张票
张三9锁对象before:1522503870
李四9锁对象:1522503870
张三9锁对象:1522503870
李四抢到了第9张票
李四8锁对象before:2045992545
李四8锁对象:2045992545
张三抢到了第9张票

我想知道为什么张三和李四都能得到:李四9锁对象:1522503870张三9锁对象:1522503870

EN

回答 1

Stack Overflow用户

发布于 2022-01-14 11:49:04

我可能错了,但是当您这样做时,您可以看到System.identityHashCode(i)发生了变化,因此在同步块之外等待的另一个线程现在可以进入它。对更改标识/引用的对象进行同步不是一个好主意,尝试在堆栈上同步并使用stack.push(.)进行调试:这不会更改引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70710018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档