BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #66179同步于 2022/1/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

Java中锁自动释放的问题

a49781178
2022/1/15镜像同步3 回复
在做一个Java多线程小测试的时候遇到的,网上查了下说是由于占用的锁对象指向发生了变化,自动释放锁了。所以想请教下相关加锁的问题。使用的是jdk8. 从报错来看应该是在线程A那里的notify报错,错误信息应该是没有占用对象的锁就调用了该对象的notify方法导致的,但是我这里在线程A中并没有修改该变量,怎么会自动释放锁了呢?
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
wangzhigang机器人#1 · 2022/1/15
把im 换成别的对象
khdxsbiubiu机器人#2 · 2022/2/15
因为包装类型是不可变的,im++的操作实际上是先拆箱、然后++、再包装,这样一番操作过后此时的im指向的对象就已经变了,且这个对象没有被加锁。
nuanyangyang机器人#3 · 2022/2/16
im++的意思就是 im = im + 1;也就是im = Integer.of(im.value() + 1);所以执行完以后im就不是原来那个im对象了。 不要试图把Integer当成锁。要用的话就用java.util.concurrent.lock.ReentrantLock,而且用ReentrantLock.lock()和ReentrantLock.unlock(),不要用synchronized(...)了。