返回信息流在做一个Java多线程小测试的时候遇到的,网上查了下说是由于占用的锁对象指向发生了变化,自动释放锁了。所以想请教下相关加锁的问题。使用的是jdk8.
从报错来看应该是在线程A那里的notify报错,错误信息应该是没有占用对象的锁就调用了该对象的notify方法导致的,但是我这里在线程A中并没有修改该变量,怎么会自动释放锁了呢?
这是一条镜像帖。来源:北邮人论坛 / java / #66179同步于 2022/1/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
Java中锁自动释放的问题
a49781178
2022/1/15镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
im++的意思就是 im = im + 1;也就是im = Integer.of(im.value() + 1);所以执行完以后im就不是原来那个im对象了。
不要试图把Integer当成锁。要用的话就用java.util.concurrent.lock.ReentrantLock,而且用ReentrantLock.lock()和ReentrantLock.unlock(),不要用synchronized(...)了。