线程安全问题第三种解决方法------实现Lock接口

package cn.dali3.code05;

/*解决线程安全问题的第三种方法:
*   jdk1.5之后出现了新的接口 Lock
*   包:java.util.concurrent.locks
*
*   使用步骤:
*       1.在成员位置创建一个Reentrantlock的对象
*       2.在可能出现问题的代码前插入lock方法
*       3.在结尾插入unlock方法
*   注意:为了保证代码是否有异常都能释放,一般我们把unlock放入finally里*/
public class Demo01 {
    public static void main(String[] args) {
        Runnable run = new RunnableImpl();
        Thread th0 = new Thread(run);//创建第一个窗口
        Thread th1 = new Thread(run);//创建第二个窗口
        Thread th2 = new Thread(run);//创建第三个窗口
        th0.start();
        th1.start();
        th2.start();
    }
}

接口的实现类:

package cn.dali3.code05;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class RunnableImpl implements Runnable {
    private int ticket = 100;
    Lock l = new ReentrantLock();

    @Override
    public void run() {
        while (true) {
            l.lock();
            if (ticket > 0) {
                try {
                    Thread.currentThread().sleep(10);
                    System.out.println(Thread.currentThread().getName() + "窗口" + "正在卖第" + ticket + "张票");
                    ticket--;
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    l.unlock();
                }

            }
        }
    }
}

你可能感兴趣的:(JAVA)