本文共 1972 字,大约阅读时间需要 6 分钟。
传统的多线程票务系统可能会出现线程安全问题,尤其是在多个线程同时操作共享资源时。例如,三个线程同时抢票可能导致票数重复售出或票数异常减少等问题。
public class TestLock { public static void main(String[] args) { TestLock2 testLock2 = new TestLock2(); new Thread(testLock2).start(); new Thread(testLock2).start(); new Thread(testLock2).start(); }}class TestLock2 implements Runnable { int ticketNums = 10; @Override public void run() { while (true) { if (ticketNums > 0) { Thread.sleep(1000); System.out.println(ticketNums--); } else { break; } } }} 运行时可能会出现以下问题:
通过引入ReentrantLock锁,可以有效防止线程抢票问题。以下是改进后的代码:
import java.util.concurrent.locks.ReentrantLock;public class TestLock { public static void main(String[] args) { TestLock2 testLock2 = new TestLock2(); new Thread(testLock2).start(); new Thread(testLock2).start(); new Thread(testLock2).start(); }}class TestLock2 implements Runnable { int ticketNums = 10; private final ReentrantLock lock = new ReentrantLock(); @Override public void run() { while (true) { lock.lock(); try { if (ticketNums > 0) { Thread.sleep(1000); System.out.println(ticketNums--); } else { break; } } finally { lock.unlock(); } } }} 锁的类型
锁的应用场景
性能特点
在多线程环境下,建议根据具体需求选择合适的锁机制:
转载地址:http://zseq.baihongyu.com/