zoukankan      html  css  js  c++  java
  • 解决线程安全问题第三种——Lock锁

    java.util.concurrent.locks

    lock接口中的方法:

    void lock()获取锁

    void unlock()释放锁

    使用步骤:

    java.util.concurrent.locks.ReentrantLock接口
    使用步骤:
    1.在成员位置创建ReentrantLock对象
    2.在可能会出现安全问题的代码前调用Lock接口中的方法Lock获取锁
    3.在可能会出现安全问题的代码后调用Lock接口中的方法unLock释放锁
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    public class RunnableImpl implements Runnable {
        private int ticket=100;
        //Object obj=new Object();//创建锁对象,三个进程用一个锁对象。
        Lock l=new ReentrantLock();
        @Override
        public void run() {
            System.out.println(this);//
    
            while (true){
                l.lock();
    
                if (ticket>0){
                    //票存在,卖票ticket
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName()+"-->正在卖"+ticket+"张票");
                    ticket--;
                }
                l.unlock();
    
            }
    
        }
    
    }
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    public class RunnableImpl implements Runnable {
        private int ticket=100;
        //Object obj=new Object();//创建锁对象,三个进程用一个锁对象。
        Lock l=new ReentrantLock();
        @Override
        public void run() {
            System.out.println(this);//
    
            while (true){
                l.lock();
    
                if (ticket>0){
                    //票存在,卖票ticket
                    try {
                        Thread.sleep(10);
                        System.out.println(Thread.currentThread().getName()+"-->正在卖"+ticket+"张票");
                        ticket--;
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }finally {
                        l.unlock();
                    }
                }
            }
       }
    }
     
  • 相关阅读:
    [贪心]P1049 装箱问题
    js中字符串转换为日期和比较大小
    weblogic配置数据源出错
    myeclipse安装svn插件的多种方式
    使用令牌实现防重复提交
    struts1.3异常处理机制
    spring log4j.properties
    spring jdbc.property的配置与使用
    js循环array,json,map
    java web的一些特殊用法(一)
  • 原文地址:https://www.cnblogs.com/cy2268540857/p/13735607.html
Copyright © 2011-2022 走看看