• 使用Lock接口来解决线程安全的问题


    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();
    }
    }
  • 相关阅读:
    去中心化共识
    创建你的第一个去中心化应用(dapp)
    务实的去中心化
    什么是去中心化市场(OpenBazaar)
    为什么要做去中心化市场(OpenBazaar)
    区块链让物联网真正实现去中心化
    去中心化市场OpenBazaar如何运转
    如何安装去中心化市场(OpenBazaar)
    android自定义View&自定义ViewGroup(上)
    android自定义View&自定义ViewGroup(上)
  • 原文地址:https://www.cnblogs.com/newcityboy/p/11240938.html
Copyright © 2020-2023  润新知