重学java 44.多线程 Lock锁的使用

news2025/3/15 6:29:49

昨日之深渊,今日之浅谈

                        —— 24.5.25

一、Lock对象的介绍和基本使用

1.概述

        Lock是一个接口

2.实现类

        ReentrantLock

3.方法

        lock()获取锁

        unlock()释放锁

4.Lock锁的使用

package S78Lock;

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

public class MyTicket implements Runnable{
    // 定义100章票
    int ticket = 100;

    // 创建lock对象
    Lock lock = new ReentrantLock();


    @Override
    public void run(){
        while(true){
            try{
                Thread.sleep(100L);

                // 获取锁
                lock.lock();
                if (ticket > 0) {
                    System.out.println(Thread.currentThread().getName() + "买了第" + ticket + "张票");
                    ticket--;
                }
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }finally {
                // 释放锁
                lock.unlock();
            }
        }
    }
}
package S78Lock;

public class Demo217Test {
    public static void main(String[] args) {
        // new一次,分别传递到三个线程对象中去
        MyTicket myTicket = new MyTicket();
        System.out.println(myTicket);

        Thread th1= new Thread(myTicket, "赵四");
        Thread th2= new Thread(myTicket, "刘能");
        Thread th3= new Thread(myTicket, "广坤");

        th1.start();
        th2.start();
        th3.start();
    }
}

仍然是线程安全的

5.synchronized和Lock锁的区别      

        synchronized:不管是同步代码块还是同步方法,都需要在结束{}后,释放锁对象

        Lock:通过两个方法控制需要被同步的代码,更加灵活

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1695166.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

类与对象:接口

一.概念 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。 二.语法规则 与定义类相似,使用interface关键词。 Idea可以在开始时直接创建…

【控制实践——二轮平衡车】【三】基于PID的直立控制

传送门 系列博客前言直立运动分析基于PID控制器的直立控制角度环控制角速度控制总结 电机转速的控制前言电机转速控制 结语 系列博客 【控制实践——二轮平衡车】【一】运动分析及动力学建模 【控制实践——二轮平衡车】【二】实物设计和开源结构&代码 【控制实践——二轮…

常见 JVM 面试题补充

原文地址 : 26 福利:常见 JVM 面试题补充 (lianglianglee.com) CMS 是老年代垃圾回收器? 初步印象是,但实际上不是。根据 CMS 的各个收集过程,它其实是一个涉及年轻代和老年代的综合性垃圾回收器。在很多文章和书籍的划分中&…

Scrapy顺序执行多个爬虫

Scrapy顺序执行多个爬虫 有两种方式: 第一种:bat方式运行 新建bat文件 cd C:\python_web\spiders\tiktokSelenium & C: & scrapy crawl spider1 & scrapy crawl spider2 & scrapy crawl spider3 & scrapy crawl spider4 第二种&a…

kubeadm部署k8s v1.28

一、主机准备 主机硬件配置说明 作用IP地址操作系统配置k8s-master01192.168.136.55openEuler-22.03-LTS-SP12颗CPU 4G内存 50G硬盘k8s-node01192.168.136.56openEuler-22.03-LTS-SP12颗CPU 4G内存 50G硬盘k8s-node02192.168.136.57openEuler-22.03-LTS-SP12颗CPU 4G内存 50G…

windows 11上自带时间管理-番茄工作法

在 Windows 11 中,你可以使用 专注 功能来最大程度地减少干扰,帮助你保持专注。 专注的工作原理 专注时段打开后,将会出现以下情况: 专注计时器将显示在屏幕上 请勿打扰将打开 任务栏中的应用不会闪烁发出提醒 任务栏中应用的…

MySQL 8.4.0 LTS 变更解析:I_S 表、权限、关键字和客户端

↑ 关注“少安事务所”公众号,欢迎⭐收藏,不错过精彩内容~ MySQL 8.4.0 LTS 已经发布 ,作为发版模型变更后的第一个长期支持版本,注定要承担未来生产环境的重任,那么这个版本都有哪些新特性、变更,接下来少…

UIKit之猜图器Demo

需求 实现猜图器Demo 功能分解: 1>下一题切换功能 2>点击图片后能放大并背景变暗(本质是透明度的变化)。再次点击则缩小,删除暗色背景。 3> 答案区按钮点击则文字消失,选择区对应文字恢复。 4> 选择区…

python爬虫登录到海康相机管理页面

简述 1.最近接到个任务是在管理页面更改相机的某个参数,下载官方的sdk貌似没有提供这个接口,所以只能自己写爬虫登录发请求了。 1.主要步骤 1.1 发送get请求获取到salt,sessionID,challenge等信息 http://admin:123456192.168.…

将 MOV 转换为 MP4 的 10 个最佳工具

在当今的数字时代,内容创作和消费正处于巅峰,对多功能和兼容媒体格式的需求从未如此之高。在众多可用的视频格式中,MOV 和 MP4 因其在各种设备和平台中的广泛使用而脱颖而出。然而,将 MOV 文件转换为更通用兼容的 MP4 格式的需求已…

OZON的物流有哪些,OZON物流Unitrade

随着跨境电商的快速发展,OZON作为俄罗斯领先的电商平台,其物流服务的重要性不言而喻。对于卖家而言,选择合适的物流合作伙伴,不仅关乎商品的运输效率,更直接关系到店铺的口碑和消费者的购物体验。本文将带您深入了解OZ…

傲软抠图一款专为抠图打造的AI智能抠图应用,智能识别人物物体抠图软件,无广vip版 v1.8.1

软件介绍 傲软抠图,作为一款高度专业化的智能人工智能图片处理软件,被设计专门用于执行精确的图像提取功能。该程序利用其先进的算法能动地识别和分辨图像中的人物或物体轮廓,并能够从原始图片材料中分离出带有透明背景的目标图像。除了自动…

容器化:ES和Kibana

1 缘起 最近在学习使用ES, 为了找一个功能强大的可视化工具,之前使用了ES-Head,可以满足学习需求。 闲暇时间又折腾了另一个工具Kibana, 分享如下。 Kibana优点: 用户友好性:Kibana提供直观易用的用户界面…

IC卡水表抄表是什么?什么叫IC卡水表抄表?

一、什么叫IC卡水表抄表 IC卡水表抄表是一种现代化水资源管理方法,主要是通过集成智能IC卡科技的水表开展计量检定和传送数据。用户在预付模式中,根据IC卡在线充值后再用,用水量会自动保存在卡上,大大提高了抄表效率精确性。 二…

机器学习预测-CNN手写字识别

介绍 这段代码是使用PyTorch实现的卷积神经网络(CNN),用于在MNIST数据集上进行图像分类。让我一步步解释: 导入库:代码导入了必要的库,包括PyTorch(torch)、神经网络模块&#xff0…

STM32H743的FDCAN使用方法(1):STM32CubeMX初始化代码生成

0 工具准备 1.STM32CubeMX1 前言 本文介绍基于STM32CubeMX,使用stm32h743xi的对FDCAN2进行配置的方法。 2 初始化代码生成 2.1 选择FDCAN引脚 本例选择PB5、PB6作为FDCAN2的RX、TX引脚。 2.2 选择FDCAN时钟源 本例选择PLL2Q作为FDCAN时钟源,频率…

Redis(1)-Jedis连接配置

问题 阿里云安装并启用Redis后,尝试在本地用Jedis调用,发现报错 public class Jedis01 {Testpublic void connect(){Jedis jedis new Jedis("101.37.31.211", 6379); // 公网ipjedis.auth("123"); // 密码String ping jedis.pin…

可转债日内自动T+0交易,行情推送+策略触发+交易接口

说明 目前这个项目已编译打包,下载即可测试,直接生成多平台可执行文件,详见运行方法。行情部分与策略弱相关,拆分解耦单独作为一个项目。行情项目请移步GitHub - freevolunteer/hangqing: A股行情订阅工具,支持股票/可转债level2/level2数据&…

Golang实现递归复制文件夹

代码 package zdpgo_fileimport ("errors""os""path/filepath""strings" )// CopyDir 复制文件夹 // param srcPath 源文件夹 // param desPath 目标文件夹 // return error 错误信息 func CopyDir(srcPath, desPath string) error {…

机器学习第十次课

前言 因为考了一次试,所以没讲太多新东西,唯一的问题是有的知识刚讲完就考了,导致我爆了...... 正文 主要讲的就是一个贝叶斯分类模型,这是属于生成式的分类器了 Bayesian decision theory 我的理解是贝叶斯公式则是利用条件概率和全概率公式计算后验概率,就这么简单 但是…