Java-多线程-线程安全-Lock锁

Java-多线程-线程安全-Lock锁

  • JDK1.5后新增新一代的线程同步方式:Lock锁
  • 与采用synchronized相比,lock可提供多种锁方案,更灵活
  • synchronized是Java中的关键字,这个关键字的识别是靠JVM来识别完成的呀。是虚拟机级别的。
  • 但是Lock锁是API级别的,提供了相应的接口和对应的实现类,这个方式更灵活,表现出来的性能优于之前的方式。
  • 使用注意:
    • 打开锁就必须记得释放锁,不然其他线程就一直是阻塞状态
    • 建议使用try-catch-finally的方式,保证不管程序中间执行情况,最后一定会把锁释放
  • 示例:
public class BuyTicketThread implements Runnable{
    private int ticketNum = 10;
    Lock lock = new ReentrantLock();
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            // 打开锁
            lock.lock();
            try {
                if(ticketNum>0){
                    System.out.println("我在" + Thread.currentThread().getName() + "买到了西藏到成都的第" + ticketNum-- + "张机票");
                }
            }catch (Exception ex){
                ex.printStackTrace();
            }finally {
                // 释放锁
                lock.unlock();
            }
        }
    }
}
class Test {
    // 这是main方法,实现程序主要逻辑
    public static void main(String[] args) {
        // 定义一个线程对象, 可以只创建一个线程对象
        BuyTicketThread btt = new BuyTicketThread();
        // 窗口1
        Thread t1 = new Thread(btt, "窗口1");

        // 窗口2
        Thread t2 = new Thread(btt, "窗口2");

        // 窗口3
        Thread t3 = new Thread(btt, "窗口3");

        // 启动线程
        t1.start();
        t2.start();
        t3.start();

    }
}
posted @ 2021-01-19 19:39  殃奕  阅读(62)  评论(0编辑  收藏  举报