Java-多线程-安全性-lock技术

package cn.bruce.Thread;

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

//多线程售票案例
//解决安全问题,JAVA程序提供了lock技术{线程要操作的共享数据}

public class MoreThreadDemo3 {
    public static void main(String[] args) {
        // 创建Runnable接口实现类对象
        Ticket t = new Ticket();
        // 创建三个Thread类对象,传递Runnable接口实现类
        Thread t0 = new Thread(t, "窗口1");
        Thread t1 = new Thread(t, "窗口2");
        Thread t2 = new Thread(t, "窗口3");
        // 开启线程
        t0.start();
        t1.start();
        t2.start();

    }
}

class Ticket implements Runnable {
    private int number = 100;
    // 在类的成员位置,创建LOCK接口的实现类对象
    private Lock lock = new ReentrantLock();

    public void run() {
        while (true)
        {
            payTicket();
        }
    }

    public synchronized void payTicket() {// 同步方法技术
        // 对票数做判断,大于0 可以出售
        // 调用lock接口方法lock获取锁对象
        lock.lock();// 加锁
        if (number > 0)
        {
            try
            {
                Thread.sleep(10);// 使用休眠,模拟CPU切换
                System.out.println(Thread.currentThread().getName() + "出售第" + number--);
            } catch (Exception e)
            {
                e.printStackTrace();
            } finally
            {
                lock.unlock();// 无论有没有异常 都会解锁
            }

        }
    }
}
原文地址:https://www.cnblogs.com/BruceKing/p/13572550.html