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();
                    }
                }
            }
       }
    }
     
  • 相关阅读:
    SimpleDateFormat解析的时区问题
    linux之cp/scp命令+scp命令详解
    java.net.SocketException: java.security.NoSuchAlgorithmException
    Gradle使用手册(一):为什么要用Gradle?
    js_实用
    exp.validate.js
    MySQL实用技巧
    MongoDB 用户配置
    js 图片处理 Jcrop.js API
    MySQL连接池
  • 原文地址:https://www.cnblogs.com/cy2268540857/p/13735607.html
Copyright © 2011-2022 走看看