package cn.itcast.demo16.Demo09.Lock;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * @author newcityman * @date 2019/7/24 - 20:38 * 解决线程安全问题的第三种方案:使用lock锁 * java.util.concurrent.locks.lock接口 * Lock实现提供了比使用synchronized方法和语句可获得的更广泛的锁定操作 * Lock接口中的方法: * void lock()获取锁 * void unlock()释放锁 * java.util.concurrent.Locks.ReentrantLock implements Lock接口 * * 使用步骤: * 1、在乘员位置创建一个ReentrantLock implement Lock接口 * 2、在可能出现安全问题的代码前调用Lock接口中的lock方法获取锁 * 3、在可能出现安全问题的代码后调用Lock接口中的unLock方法释放锁 */public class RunnableImpl implements java.lang.Runnable {private int ticket = 100; Lock l = new ReentrantLock(); @Override public void run() {while (true) {l.lock(); try { Thread.sleep(10); if (ticket > 0) { System.out.println(Thread.currentThread().getName() + "--->正在卖" + ticket + "张票"); ticket--; } } catch (InterruptedException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally {l.unlock(); } } }}
package cn.itcast.demo16.Demo09.Lock;/** * @author newcityman * @date 2019/7/24 - 20:44 */public class Demo01TicketLock {public static void main(String[] args) { RunnableImpl impl = new RunnableImpl(); Thread t1 = new Thread(impl); Thread t2 = new Thread(impl); Thread t3 = new Thread(impl); t1.start(); t2.start(); t3.start(); }}
转载于:https://www.cnblogs.com/newcityboy/p/11240938.html
相关资源:JAVA上百实例源码以及开源项目
转载请注明原文地址: https://mac.8miu.com/read-54847.html