zoukankan      html  css  js  c++  java
  • JAVA,使用Lock锁解决线程安全问题

    实现类:

    package com.java.day19ThreadLock;

    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    /*使用步骤:
    * 1.在成员变量位置创建一个ReentrantLock对象
    * 2.在可能出现线程安全的代码前调用Lock接口中的方法lock获取锁
    * 3.在可能出现线程安全的代码后调用Lock接口中的方法unlock锁
    * */
    public class ThreadLock implements Runnable{
    // 票的数量
    private int ticket = 100;
    // 成员变量位置创建一个ReentrantLock对象
    Lock l = new ReentrantLock();


    @Override
    public void run() {
    while (true){
    l.lock();
    if (ticket > 0) {
    try {
    Thread.sleep(10);
    System.out.println(Thread.currentThread().getName()+"-->正在卖第"+ticket+"张票");
    ticket--;
    } catch (InterruptedException e) {
    e.printStackTrace();
    }finally {
    l.unlock();
    }

    }else {
    l.unlock();
    break;
    }

    }

    }
    }

    测试类:

    package com.java.day19ThreadLock;
    
    public class TestThreadLock {
        public static void main(String[] args) {
            ThreadLock lock = new ThreadLock();
            Thread t1 = new Thread(lock);
            Thread t2 = new Thread(lock);
            Thread t3 = new Thread(lock);
            t1.start();
            t2.start();
            t3.start();
        }
    }

  • 相关阅读:
    CCF_ 201403-2_窗口
    CCF_201503-2_数字排序
    [loj3346]交换城市
    [cf516E]Drazil and His Happy Friends
    [cf505E]Mr. Kitayuta vs. Bamboos
    [loj3343]超现实树
    [loj3331]选课
    [loj3342]制作菜品
    [loj3156]回家路线
    [loj3339]美食家
  • 原文地址:https://www.cnblogs.com/xiamaojjie/p/14992514.html
Copyright © 2011-2022 走看看