复习卖票问题


复习卖票问题

在这里插入图片描述

LOCK接口

是什么:
锁实现提供了比使用同步方法和语句可以获得的更广泛的锁操作。它们允许更灵活的结构,可能具有非常不同的属性,并且可能支持多个关联的条件对象。

Lock接口的实现ReentrantLock可重入锁

class X {   
private final ReentrantLock lock = new ReentrantLock();  
public void main() {    
 lock.lock();  // 上锁   
  try {       // 这里写需要加锁的操作  

        }  
           finally {    
              lock.unlock()   
                }  
                         } 
         }

代码

package cduck.cn;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 题目 :三个售票员 卖30张票
 *
 * 高内聚 低耦合的前提下  --》多线程编程的模板+套路:
 *  线程          操作(资源对外暴露的方法)       资源
 */

class Ticket {//资源类
    int number=30;
    Lock lock=new ReentrantLock();


    public  void saleTickets() {
        lock.lock();
        try{
            if (number>0){
                System.out.println(Thread.currentThread().getName()+"\t 卖出第:"+number-- +"张票,还剩余"+number+"张票");

            }
        }catch (Exception e){

        }finally {
            lock.unlock();
        }

    }
}


public class saleTicket {

    public static void main(String[] args) {
        Ticket ticket = new Ticket();

        new Thread(()->{for (int i=0;i<30;i++){ticket.saleTickets();}},"张三").start();
        new Thread(()->{for (int i=0;i<30;i++){ticket.saleTickets();}},"李四").start();
        new Thread(()->{for (int i=0;i<30;i++){ticket.saleTickets();}},"王五").start();

//        new Thread(new Runnable() {//匿名内部类(new 接口)
//            @Override
//            public void run() {
//                for (int i=0;i<30;i++){
//                    ticket.saleTickets();
//                }
//            }
//        },"一号人员").start();
//
//        new Thread(new Runnable() {//匿名内部类(new 接口)
//            @Override
//            public void run() {
//                for (int i=0;i<30;i++){
//                    ticket.saleTickets();
//                }
//            }
//        },"二号人员").start();
//
//        new Thread(new Runnable() {//匿名内部类(new 接口)
//            @Override
//            public void run() {
//                for (int i=0;i<30;i++){
//                    ticket.saleTickets();
//                }
//            }
//        },"三号人员").start();
    }
}

文章作者: fFee-ops
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fFee-ops !
评论
  目录