美文网首页并发(个人收集)
JUC(六) - Lock 同步锁(1)

JUC(六) - Lock 同步锁(1)

作者: 21号新秀_邓肯 | 来源:发表于2020-05-18 13:59 被阅读0次

    6.Lock 同步锁

    • 在 Java 5.0 之前,协调共享对象的访问时可以使用的机制只有 synchronized 和 volatile 。Java 5.0 后增加了一些新的机制,但并不是一种替代内置锁的方法,而是当内置锁不适用时,作为一种可选择的高级功能。
    • ReentrantLock 实现了 Lock 接口,并提供了与synchronized 相同的互斥性和内存可见性。但相较于synchronized 提供了更高的处理锁的灵活性。

    6.1 案例一

    class Ticket implements Runnable {
    
        private int tick = 100;
    
        private Lock lock = new ReentrantLock();
    
        @Override
        public void run() {
            while (lock != null) {
                //加锁
                lock.lock();
    
                try {
                    if (tick > 0) {
                        //睡眠, 为了显示方便
                        try {
                            Thread.sleep(200);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        System.out.println(Thread.currentThread().getName() + " 完成售票,余票为:" + --tick);
                    }
                } finally {
                    //释放锁
                    lock.unlock();
                }
            }
        }
    }
    

    测试

        public static void main(String[] args) {
            Ticket ticket = new Ticket();
    
            new Thread(ticket, "1号窗口").start();
            new Thread(ticket, "2号窗口").start();
            new Thread(ticket, "3号窗口").start();
        }
    

    相关文章

      网友评论

        本文标题:JUC(六) - Lock 同步锁(1)

        本文链接:https://www.haomeiwen.com/subject/tvucohtx.html