• ReentrantLock 公平锁和非公平锁。


    1. import java.util.concurrent.locks.ReentrantLock;
    2. public class Ticket {
    3. private int number = 50;
    4. ReentrantLock lock = new ReentrantLock(true);
    5. public void sale(){
    6. lock.lock();
    7. try{
    8. if(number >0){
    9. System.out.println(Thread.currentThread().getName()+"卖出单"+(number--)+ "还剩下"+number);
    10. }
    11. }
    12. finally {
    13. lock.unlock();
    14. }
    15. }
    16. public static void main(String[] args) {
    17. Ticket ticket = new Ticket();
    18. new Thread(()->{
    19. for (int i = 0; i < 55; i++) {
    20. ticket.sale();
    21. }
    22. },"a").start();
    23. new Thread(()->{
    24. for (int i = 0; i < 55; i++) {
    25. ticket.sale();
    26. }
    27. },"b").start();
    28. new Thread(()->{
    29. for (int i = 0; i < 55; i++) {
    30. ticket.sale();
    31. }
    32. },"c").start();
    33. }
    34. }

    买票程序

      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
     

  • 相关阅读:
    java彻底搞懂单例模式
    MultiBank Group宣布在阿联酋和新加坡取得两项新牌照
    复杂数据没头绪?
    VUE框架(二)
    基于Git和Nginx搭建自己的私人图床,告别图片404
    JAVA计算机毕业设计动物在线领养网站Mybatis+系统+数据库+调试部署
    了解一下拉绳位移编码器还有哪些功能特点?
    LeetCode 2369. 检查数组是否存在有效划分 动态规划
    Ubuntu上安装Chrome浏览器
    HTML静态网页作业——基于html+css+javascript+jquery+bootstarp响应式成都家乡介绍网页
  • 原文地址:https://blog.csdn.net/yaobo2816/article/details/125607356