(20)锁

Lock

同步锁使用的弊端:当线程任务中出现了多个同步(多个锁)时,如果同步中嵌套了其他的同步。这时容易引发一种现象:程序出现无限等待,这种现象我们称为死锁

查阅API,查阅Lock接口描述,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作。

Lock接口中的常用方法

Lock提供了一个更加面对对象的锁,在该锁中提供了更多的操作锁的功能。

我们使用Lock接口,以及其中的lock()方法和unlock()方法替代同步,对电影院卖票案例中Ticket类进行如下代码修改:

public

class Ticket implements Runnable {

    //共100票

    int ticket = 100;

    //创建Lock锁对象

    Lock ck = new ReentrantLock();

    @Override

    public void run() {

        //模拟卖票

        while(true){

            //synchronized (lock){

            ck.lock();

                if (ticket > 0) {

                    //模拟选坐的操作

                    try {

                        Thread.sleep(10);

                    } catch (InterruptedException e) {

                        e.printStackTrace();

                    }

                    System.out.println(Thread.currentThread().getName()+"正在卖票:" + ticket--);

                }

            ck.unlock();

            //}

        }

    }

你可能感兴趣的:((20)锁)