锁机制存在以下问题:
(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。
(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。
(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。
为了保证线程安全的同时又提高性能可以使用Atomic包下面的类
下面是一段简单的抢车票代码,使用atomicInteger保证了线程安全的同时又不影响性能
public static void main(String[] args) {
AtomicInteger atomicInteger = new AtomicInteger();
atomicInteger.set(10);
for (int i = 0; i < 10; i++) {
new Thread(() -> {
while (atomicInteger.get()!=0){
int andDecrement = atomicInteger.getAndDecrement();
System.out.println(Thread.currentThread().getName() + "线程抢到第:" + andDecrement + "张票");
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
执行结果: