首页 > 其他分享 >24 lock锁

24 lock锁

时间:2023-09-08 15:34:41浏览次数:30  
标签:24 Thread lock void 线程 new ticket

package ThreadDemo;
//多个线程同时操作同一个对象,涉及到资源的独享与共享并发什么的
// 多个线程同时操作同一个对象,可能会出现问题:线程不安全,数据紊乱    ------>上锁
// 并发与同步
  // 火车票例子

import java.util.concurrent.locks.ReentrantLock;

// synchronized 锁住的是 操作者对象; synchronized 块 锁住的是 某个属性
public class Test20_Synchronized implements Runnable{
    // 定义可重入锁
    private final ReentrantLock lock =new ReentrantLock();
    boolean flag=true;
    int ticketNums=10;
    @Override
    public  void run() {
        while (flag){
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            buy();
        }
    }

    private  void buy()  {   // synchronized 关键字,加锁 同步。 lock()差不多

        if (ticketNums<=0){
            flag=false;
            return;
        }else {
            try {
                lock.lock();  // 锁住
                System.out.println(Thread.currentThread().getName()+"--->抢到了第"+ ticketNums-- +"张票");
                // Thread.currentThread().getName() :获得线程体的名字
            }finally {
                lock.unlock();  // 解锁
            }
        }

    }

    public static void main(String[] args) {
        // 多个线程同时操作同一个对象,可能会出现问题------>上锁


        Test20_Synchronized ticket = new Test20_Synchronized();
        new Thread(ticket,"学生").start();  // 名为 学生线程体
        new Thread(ticket,"老师").start();  // 老师线程体
        new Thread(ticket,"黄牛").start();  // 黄牛线程体
    }
}

标签:24,Thread,lock,void,线程,new,ticket
From: https://www.cnblogs.com/zhanjianhai/p/17687728.html

相关文章

  • wzOI 2023.8.24 模拟赛(附树的直径和三分法)
    2023-08-2815:53:53$$A$$典型错误一知半解看样例型:如果该队某个数组的值比最大值大就算入答案。上第一次厕所前我的思路:开局\(30\)分钟。显然,我并不需要有一个数值最大才能赢,我只需要其中一个数值比其中一个数值比其中一个数值最大的那个要大的队要大即有可能获胜......
  • codeblock安装及汉化教程
      1.双击图标   2.弹出如下对话框:  3、单击按钮Next,弹出如下对话框:  4、单击按钮IAgree,弹出如下对话框:  5、单击按钮Next,弹出如下对话框:  6、单击Browse按钮,可以重新设置安装路径  7、路径重新设置后,单击确定按钮弹出如下对话框(注意,此......
  • 实现Map批量赋值,我只需24秒搞定!
    函数的功能是将一组键值对批量赋值给Map中的键。在Java中,通常使用Map的put方法逐个将键值对赋值给Map,但在某些场景下,可能需要一次性将多个键值对赋值给Map。函数功能:Map批量赋值参数1:参数名称:target;参数类型:Map;参数描述:Map对象参数2:参数名称:keyAndValue;参数类型:Object;参数描述:k......
  • 护眼台灯怎么选?解读2024实施新国标!
    GB/T9473-2022《读写作业台灯性能要求》参编单位陪你解读护眼台灯新国标!1. 关注《读写作业台灯性能要求》对普通人来说,有什么样的意义?2. 《读写作业台灯性能要求》2022年相比2017年国标有哪些不同?3. 家长应该关注的3个选灯指标?「怎样避免孩子近视?」是家长们时刻关心的话题。想......
  • day24 - 回溯算法part01
    回溯算法理论基础 77. 组合classSolution{public:vector<vector<int>>result;vector<int>path;voiddfs(intn,intk,intstart){if(path.size()==k){result.push_back(path);return;}......
  • kafka复习:(24)consume-transform-produce模式
    packagecom.cisdi.dsp.modules.metaAnalysis.rest.kafka2023;importorg.apache.kafka.clients.consumer.*;importorg.apache.kafka.clients.producer.KafkaProducer;importorg.apache.kafka.clients.producer.ProducerConfig;importorg.apache.kafka.clients.produc......
  • 《Java编程思想第四版》学习笔记24
    //:FinallyWorks.java//ThefinallyclauseisalwaysexecutedpublicclassFinallyWorks{staticintcount=0;publicstaticvoidmain(String[]args){while(true){try{//post-incrementiszerofirsttime:......
  • 24V直流DC浪涌过压保护推荐26V电压TVS二极管
    直流DC电源端口浪涌过压防护一直都是很多新老电子工程师关注的方案之一。不管是电源端口浪涌防护还是信号接口静电保护,浪涌静电防护,找东沃,电路保护不迷路!东沃电子专注于研发、生产、销售静电保护二极管(ESD)、瞬态抑制二极管(TVS)、陶瓷气体放电管(GDT)、压敏电阻(MOV)、自恢复保险丝(PPTC)、......
  • blockchain | ethernaut 11 Elevator
    blockchain|ethernaut11Elevator这关就是简单的合约交互,以及view/pure函数的编写。合约://SPDX-License-Identifier:MITpragmasolidity^0.8.0;interfaceBuilding{functionisLastFloor(uint)externalreturns(bool);}contractElevator{boolpublict......
  • Android官方资料--Block-Based OTAs
    Block-BasedOTAsINTHISDOCUMENTRecommendationsFilevs.BlockOTAsUpdatingunmodifiedsystemsUpdatingmodifiedsystemsYoucanenableblock-basedover-the-air(OTA)updatesfornewdevicesrunningAndroid5.0.OTAisthemechanismbywhichOEMsremote......