ReentrantLock 公平锁和非公平锁。

import java.util.concurrent.locks.ReentrantLock;

public class Ticket {
    private int number = 50;
    ReentrantLock lock = new ReentrantLock(true);
    public  void sale(){
        lock.lock();
        try{
            if(number >0){
                System.out.println(Thread.currentThread().getName()+"卖出单"+(number--)+ "还剩下"+number);
            }
        }
        finally {
            lock.unlock();
        }

    }

    public static void main(String[] args) {
        Ticket ticket = new Ticket();
        new Thread(()->{
            for (int i = 0; i < 55; i++) {
                ticket.sale();
            }
        },"a").start();
        new Thread(()->{
            for (int i = 0; i < 55; i++) {
                ticket.sale();
            }
        },"b").start();
        new Thread(()->{
            for (int i = 0; i < 55; i++) {
                ticket.sale();
            }
        },"c").start();
    }
}

买票程序

  ReentrantLock lock = new ReentrantLock(true); 公平锁

a卖出单50还剩下49
b卖出单49还剩下48
c卖出单48还剩下47
a卖出单47还剩下46
b卖出单46还剩下45
c卖出单45还剩下44
a卖出单44还剩下43
b卖出单43还剩下42
c卖出单42还剩下41
a卖出单41还剩下40
b卖出单40还剩下39
c卖出单39还剩下38
a卖出单38还剩下37
b卖出单37还剩下36
c卖出单36还剩下35
a卖出单35还剩下34
b卖出单34还剩下33
c卖出单33还剩下32
a卖出单32还剩下31
b卖出单31还剩下30
c卖出单30还剩下29
a卖出单29还剩下28
b卖出单28还剩下27
c卖出单27还剩下26
a卖出单26还剩下25
b卖出单25还剩下24
c卖出单24还剩下23
a卖出单23还剩下22
b卖出单22还剩下21
c卖出单21还剩下20
a卖出单20还剩下19
b卖出单19还剩下18
c卖出单18还剩下17
a卖出单17还剩下16
b卖出单16还剩下15
c卖出单15还剩下14
a卖出单14还剩下13
b卖出单13还剩下12
c卖出单12还剩下11
a卖出单11还剩下10
b卖出单10还剩下9
c卖出单9还剩下8
a卖出单8还剩下7
b卖出单7还剩下6
c卖出单6还剩下5
a卖出单5还剩下4
b卖出单4还剩下3
c卖出单3还剩下2
a卖出单2还剩下1
b卖出单1还剩下0

   ReentrantLock lock = new ReentrantLock(); 非公平锁

a卖出单50还剩下49
a卖出单49还剩下48
a卖出单48还剩下47
a卖出单47还剩下46
a卖出单46还剩下45
a卖出单45还剩下44
a卖出单44还剩下43
a卖出单43还剩下42
a卖出单42还剩下41
a卖出单41还剩下40
a卖出单40还剩下39
a卖出单39还剩下38
a卖出单38还剩下37
a卖出单37还剩下36
a卖出单36还剩下35
a卖出单35还剩下34
a卖出单34还剩下33
a卖出单33还剩下32
a卖出单32还剩下31
a卖出单31还剩下30
a卖出单30还剩下29
a卖出单29还剩下28
a卖出单28还剩下27
a卖出单27还剩下26
a卖出单26还剩下25
a卖出单25还剩下24
a卖出单24还剩下23
a卖出单23还剩下22
a卖出单22还剩下21
a卖出单21还剩下20
a卖出单20还剩下19
a卖出单19还剩下18
a卖出单18还剩下17
a卖出单17还剩下16
a卖出单16还剩下15
a卖出单15还剩下14
a卖出单14还剩下13
b卖出单13还剩下12
b卖出单12还剩下11
b卖出单11还剩下10
b卖出单10还剩下9
b卖出单9还剩下8
b卖出单8还剩下7
b卖出单7还剩下6
b卖出单6还剩下5
b卖出单5还剩下4
b卖出单4还剩下3
b卖出单3还剩下2
b卖出单2还剩下1
b卖出单1还剩下0
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值