Integer 在多线程下使用ReentrantLock加锁后安全吗?
经过测试时不安全的,因为超过-128到127缓存的数据都会涉及到装箱操作,这个时候每个线程来都会new Integer(XX)。从而导致拿到的都不是同一把锁无法形成互斥锁。
Integer ticketNum = 10;
@Override
public void run() {
final ReentrantLock reentrantLock = new ReentrantLock();
while (true) {
try {
reentrantLock.lock();
if (ticketNum <= 0) {
break;
} else {
System.out.println(Thread.currentThread().getName() + "->,抢到了:" + ticketNum-- +",锁" + reentrantLock);
}
} catch (Exception e) {
}finally {
reentrantLock.unlock();
}
}