关于lock锁

S7-1200 Modbus TCP客户端配置实战:从基础设置到数据交互详解 本文详细介绍了S7-1200 Modbus TCP客户端的配置方法,从基础设置到数据交互的完整流程。涵盖硬件准备、TIA Portal配置、MB_CLIENT指令参数详解、数据缓冲区管理及实战测试,帮助工程师快速掌握西门子PLC与Modbus TCP通信的关键技术。 阅读详情

关于lock锁

在 jdk1.5 之后,并发包中新增了 Lock 接口(以及相关实现类)用来实现锁功能,Lock 接口提供了与 synchronized 关键字类似的同步功能,但需要在使用时手动获取锁和释放锁。

lock锁 也叫显示锁 

大家看下这个lock锁:

lock是个接口

 这个接口下面很多锁:

对于lock锁的使用,实现生产者消费者模式的:

package com.toov5.thread;

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

//共享对象
class ResLock {
    public boolean flag = true;
    public String sex;
    public String name;
    public Lock lock = new ReentrantLock();
}
class inputThreadLock extends Thread {
    public ResLock res;

    public inputThreadLock(ResLock res) {
        this.res = res;
    }
    @Override
    public void run() {
        int count = 0;
        while (true) {
            try {
                res.lock.lock();
                if (count == 0) {
                    res.name = "lucy";
                    res.sex = "girl";
                } else {
                    res.name = "Jack";
                    res.sex = "boy";
                }
            count = (count + 1) % 2;
            } catch (Exception e) {
            }finally{
                res.lock.unlock();  //释放锁写在finally里面
            }
        
        }
    }
}
class readThreadLock extends Thread {
    public ResLock res;

    public readThreadLock(ResLock res) {
        this.res = res;
    }
    @Override
    public void run() {
        while (true) {
            try {
                res.lock.lock();
                System.out.println(res.name + "," + res.sex);
                
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                res.lock.unlock();
            }
            
        }
    }
}
public class LockTest {
    public static void main(String[] args) {
        Res res = new Res();
        inputThread inputThread = new inputThread(res);
        readThread  readThread = new readThread(res);
        inputThread.start();
        readThread.start();
    }    
}

注意 unlock写到finally里面哦

然后lock锁里面的 类似于 notify 和 wait的  Condition

 Condition的功能类似于在传统的线程技术中的,Object.wait()和Object.notify()的功能。

使用方法:

package com.toov5.thread;

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

//共享对象
class ResLock {
    public boolean flag = true;
    public String sex;
    public String name;
    public Lock lock = new ReentrantLock();
    public Condition condition  = lock.newCondition();
}
class inputThreadLock extends Thread {
    public ResLock res;

    public inputThreadLock(ResLock res) {
        this.res = res;
    }
    @Override
    public void run() {
        if (res.flag) {
            try {
                res.condition.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        int count = 0;
        while (true) {
            
            try {
                res.lock.lock();
                if (count == 0) {
                    res.name = "lucy";
                    res.sex = "girl";
                } else {
                    res.name = "Jack";
                    res.sex = "boy";
                }
            count = (count + 1) % 2;
            res.flag=true;
            res.condition.signal();
            } catch (Exception e) {
            }finally{
                res.lock.unlock();  //释放锁写在finally里面
            }
        
        }
    }
}
class readThreadLock extends Thread {
    public ResLock res;

    public readThreadLock(ResLock res) {
        this.res = res;
    }
    @Override
    public void run() {
        while (true) {
            try {
                res.lock.lock();
                if (res.flag) {
                    res.condition.await();
                }
                System.out.println(res.name + "," + res.sex);
                res.condition.signal();
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                res.lock.unlock();
            }
            
        }
    }
}
public class LockTest {
    public static void main(String[] args) {
        Res res = new Res();
        inputThread inputThread = new inputThread(res);
        readThread  readThread = new readThread(res);
        inputThread.start();
        readThread.start();
    }    
}

执行结果:

Lock与synchronized 关键字的区别

Lock 接口可以尝试非阻塞地获取锁 当前线程尝试获取锁。如果这一时刻锁没有被其他线程获取到,则成功获取并持有锁。
Lock 接口能被中断地获取锁 与 synchronized 不同,获取到锁的线程能够响应中断,当获取到的锁的线程被中断时,中断异常将会被抛出,同时锁会被释放。

Lock 接口在指定的截止时间之前获取锁,如果截止时间到了依旧无法获取锁,则返回。

 

synchronize重量级锁  不可控制 释放锁  遇到异常 或者代码执行完毕后 释放锁

lock轻量级  可控释放锁 更灵活一些  lock是1.5出来的 比synchronize晚 弥补了一些不足 还有读写锁 重入锁 功能要强大一些 

 

 

零基础实战:YOLO检测头自定义替换全攻略 本文为零基础用户提供了YOLO检测头自定义替换的完整实战指南。通过将检测头比作汽车的“方向盘”,文章详细阐述了为何需要替换、如何寻找和集成新检测头模块、修改配置文件以及最终训练验证的全过程,旨在帮助用户针对特定任务(如小目标检测)提升模型性能。 阅读详情

相关推荐

欧姆龙OMRON PLC之HostLink通讯协议(四)-FINS命令进阶应用与调试技巧

本文深入探讨欧姆龙OMRON PLC的HostLink通讯协议中FINS命令的进阶应用与调试技巧。文章聚焦实战排错,详细解析命令帧解剖、响应帧解读与网络抓包三大核心方法,并分享性能优化策略,如合并读写与异步设计。同时介绍了强制操作、多存储区访问等高级命令的应用场景,旨在帮助工程师高效解决现场通讯问题,提升系统稳定性与效率。

nept的博客 750

Lock接口详解

java.util.concurrent.locks包下常用的类与接口(lock是jdk 1.5后新增的) Lock和ReadWriteLock是两大锁的根接口,Lock代表实现类是ReentrantLock(可重入锁),ReadWriteLock(读写锁)的代表实现类是ReentrantReadWriteLock Condition 接口描述了可能会与锁有关联的条件变量。这些变量在用法上与使用 Object.wait 访问的隐式监视器类似,但提供了更强大的功能。需要特别指出的是,单个 Lock 可

qq_36042938的博客 1722

远程声控系统(MATLAB代码见优快云资源)

远程声控系统技术报告 一、题目要求 实现一个远程声音控制系统。首先采集不同的语音指示信号,进行适当压缩;然后通过噪声信道实现远程传输,远端接收后再通过适当计算识别出是何指示,最后送入一个处于未知状态、但能控/能观的控制系统,完成不同的控制动作。 二、问题分解与解决思路 2.1 系统设计 实验中以汉语数字语音1~9作为指令,数字语音“1”代表一号指令,数字语音“2”代表二号指令,依次类推。发送端发出语音“1”,发送端对应的数字语音文件为“1b.wav”,通过信源编码对语音进行压缩编码,然后进行信道编码并进行基

业精于勤,荒于嬉 5734

Java多线程(14)——Lock接口详解

1 基本概括 2 主要介绍 2.1 Lock接口的作用 2.1.1 简单介绍 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源,解决数据的一致性问题。在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的,而Java SE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了隐式获取释放锁的便捷...

qq_20761351的博客 569

21天学会基于 Linux 的 NPU 固件开发--12.3 如何参与 Linux 内核 NPU 子系统开发

从修复一个简单的文档拼写错误开始,或者为现有的开源 NPU 驱动(如 Sophgo, StarFive, Etinix 等厂商已上游化的驱动)添加一个缺失的 IOCTL 支持或优化一个算子,都是伟大的第一步。在 2026 年的 Linux Kernel (v6.12+) 中,NPU 驱动不再是孤立的字符设备,而是深度集成在 DRM 和 DMA-BUF 生态中,实现了与 GPU 类似的资源管理和调度能力。内核驱动必须提供清晰的 UAPI (User API),通常定义在。Step 4: 合并 (Merge)

amy_mhd的博客 67

Linux系统故障排查思路实践教程(上)

本文主要介绍了Linux系统日志分析与常见故障排查的实用方法。首先从系统日志的分类及其涉及的日志文件进行说明;其次详细讲解了忘记用户密码的解决方案;接着对系统无法启动问题,提供了异常断电后修复文件系统、/etc/fstab文件丢失恢复等常见故障的处理方案。最后介绍了文件系统只读错误的排查思路和修复方法,包括磁盘空间检查、文件系统修复等实用技巧。全文提供了大量具体命令和操作流程,为Linux系统维护人员提供了实用的故障处理指南。

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 328

Lock 接口解读

Lock 锁实现提供了比使用同步方法和语句可以获得的更广泛的锁操作。它们允 许更灵活的结构,可能具有非常不同的属性,并且可能支持多个关联的条件对 象。Lock 提供了比 synchronized 更多的功能。Lock 不是 Java 语言内置的,synchronized 是 Java 语言的关键字,因此是内置特性。Lock 是一个类,通过这个类可以实现同步访问;

一个菜鸡的博客 610

[Godot][入门] 安装与版本选择:3.x 还是 4.x?(按项目类型一键决策)

摘要: Godot引擎版本选择需根据项目需求权衡3.x与4.x。Godot4.x(如4.2)适合3D开发和新项目,支持Vulkan和GDScript2.0,但生态尚不成熟;Godot3.x(如3.5.3)则更适合稳定2D开发、Web导出及依赖现有插件/教程的场景。安装方式极简,官网下载解压即可运行。新手建议:短期高效选3.x,长期探索选4.x,旧项目勿盲目迁移。附版本对比表及决策树,助开发者快速匹配需求。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 910

Lock接口的介绍及使用

一、Lock的介绍我们知道,在Java中锁的实现可以由synchronized关键字来完成,但在Java5之后,出现了一种新的方式来实现——Lock接口。那么为什么提出这种新的方式呢? 在多线程的情况下,当一段代码被synchronized修饰之后,同一时刻只能被一个线程访问,其他线程都必须等到该线程释放锁之后才能有机会获取锁访问这段代码,占用锁的线程只有在两种情况下才能释放锁: 线程执行完了

babylove_BaLe的博客 1920

Claude Code 错误解决方案 API Error: 前缀通用错误

本文分析了Claude Code与Anthropic API通信时出现的通用错误处理问题。当API返回未分类错误时,系统会直接显示"API Error: "前缀的原始错误信息。通过错误链路追踪发现,这是由于未匹配特定错误类型时触发了通用兜底处理逻辑。文章提供了三种解决方案:查看具体错误内容、启用调试日志以及提交问题反馈,并建议用户关注错误码、使用/compact命令处理上下文超限问题。最后强调这些未分类错误是预期行为,用户应通过错误消息中的线索自行排查或反馈开发者。

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1349

基于唤醒音频的目标说话人语音识别系统设计报告

摘要 本报告设计了一套基于唤醒音频的目标说话人语音识别系统,通过五级流水线架构(唤醒检测→声纹注册→语音分离→目标ASR→拒识决策)解决复杂声学场景下的目标说话人识别问题。系统整合ECAPA-TDNN声纹模型、Conv-TasNet语音分离网络和Whisper ASR引擎,在L20 GPU上实现高效端到端推理,支持-5dB~5dB SNR范围和0~100%重叠率的双人语音场景处理。系统在目标说话人CER、拒识率和推理效率等关键指标上均达到设计目标,为智能语音交互提供了有效的身份感知解决方案。

huanghm88的专栏 73

C# Lock 解读

最近在研究.NET分布式缓存代码,正好涉及Lock,看了网上的文章,总结了一些Lock相关的知识,供大家一起学习参考。  一、Lock定义     lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断。它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。这是通过在代码块运行期间为给定对象获取互斥锁来实现的。

vincent_zhanglb的专栏 2万+

YOLOV5 自动刷图脚本实战(十五)之如何找到正确的门

DXF是一个2D游戏,我们所看到的人物移动,其实是后面的背景在移动,我们所看到的画面,不过是一个完整背景中的一个镜头视角而已想要正确找到门的坐标,我们需要对不同的地图中的每个房间做一些配置信息。

qq_38892949的博客 2811

Java 中的Lock锁

Lock锁,可以得到和synchronized一样的效果,即实现原子性、有序性和可见性。 相较于synchronized,Lock锁可手动获取锁和释放锁、可中断的获取锁、超时获取锁。 Lock是一个接口,两个直接实现类:ReentrantLock(重入锁), ReentrantReadWriteLock(读写锁)。 1.概述 Lock锁,使用时手动获取锁和释放锁,比synchro...

学习笔记 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Lock锁及获取锁的四种方法

Lock锁

是小D吖!的博客 2万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

synchronized锁与lock锁的区别

synchronized方法控制对“对象”的访问,每个对象对应一把锁,每个synchronized方法都必须获得调用该方法的对象的锁才能执行,否则线程会阻塞,方法一旦执行,就会独占该锁,直到该方法返回才释放锁,后面被堵塞的线程才能获得这个锁,继续执行。在学习多线程时,当时为了解决线程并发问题,曾有两种锁,一种是synchronized同步块,同步方法,一种就是Lock锁,那么这两种锁之间有什么区别?同步方法中无需指定监视器,因为同步方法的监视器就是this,就是这个对象本身,或者是class。

m0_73856804的博客 1248

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Lock 锁底层实现

RoundQueue(线程不安全),ConcurrentTreeMap(线程安全-put 方法使用了lock 加锁,且。并发量高的,非公平可能会导致线程饿死 === 做中间件,比如rocketmq 就需要关注锁公平和不公平。,这里循环抢锁,不断调用了尝试获取锁的方法,也利用了CAS思想。是一个接口,有三个实现类,分别是常用的 可重入锁,读锁、写锁。锁的状态,0 代表未占用锁,大于0 则代表占用锁的次数。没办法控制锁的开始、锁结束,也没办法中断线程的执行。有两种模式, 公平锁模式、非公平锁模式。

伟庭的博客 1632

Lock锁之可重入锁

Lock 是一个接口,要求实现该接口的类可以做到同步的功能。Lock 和 synchronized 有一点非常大的不同,采用 synchronized 不需要用户去手动释放锁,当 synchronized 方法或者 synchronized 代码块执行完之后, 系统会自动让线程释放对锁的占用;而 Lock 则必须要用户去手动释放锁,如果没有主动释放锁,就有可能导致出现死锁现象。下面是lock接口的常用api,下面主要介绍其中一个实现ReentrantLock(可重入锁)

m0_56724799的博客 1894

Lock锁

Lock是显示锁,需要手动的开启和关闭,与之对应的另一种锁是synchronized锁,是隐式锁,出了作用域之后能够自动释放。 Lock锁的使用:还是以车站多窗口卖票为例 class Window implements Runnable{ private int ticket=100; // 1.实例化lock private ReentrantLock lock=new...

lariy 221

Lock锁 精讲

1.为什么需要Lock 为什么synchronized不够用,还需要Lock        Lock和synchronized这两个最常见的锁都可以达到线程安全的目的,但是功能上有很大不同。        Lock并不是用来代替synchronized的而是当使用synchronized不满足情况或者不合适的时候来提供高级功能的 为什么synchronized不够

一日看尽长安花 967

Synchronized与lock锁区别

1、synchronized是java关键字,他是jvm层面; lock是接口(相应的实现比如ReentrantLock); 2、synchronized无法获取到锁的状态, lock可以获取到锁的状态; 3、synchronized是自动锁,如果代码执行完毕或发生异常, 他会自动释放锁的资源, lock手动锁,需要人工进行调用unlock方法进行释放锁的资源, 一般都是放在finally; 如果不释放会发生死锁; 4、synchronized如果线程a获取到锁的资源,发生阻塞,线程b会一直等待, 而

xc_blog 1万+

Java lock锁的一些细节

前言 lock是Java接口,采用乐观锁的设计思想,采用CAS操作来实现的一个锁,这几点跟synchronized不同,synchronized原始采用的是CPU悲观锁机制, 参考博客 深入Lock锁底层原理实现,手写一个可重入锁 ...

笔记小屋 1468

Lock锁精讲

Lock锁 精讲 1.为什么需要Lock 为什么synchronized不够用,还需要Lock Lock和synchronized这两个最常见的锁都可以达到线程安全的目的,但是功能上有很大不同。 Lock并不是用来代替synchronized的而是当使用synchronized不满足情况或者不合适的时候来提供高级功能的 为什么synchronized不够用 效率低:锁的释放情况较少,试图获得锁不能设定超时,不能中断一个正在试图获得锁的线程 不够灵活:加锁和释放的时候单一,每个锁仅有单一的条件可能是

aa119101的博客 1928

java lock锁的是什么意思_浅析JAVA Lock锁原理

同样是锁,先说说synchronized和lock的区别:synchronized是java关键字,是用c++实现的;而lock是用java类,用java可以实现synchronized可以锁住代码块,对象和类,但是线程从开始获取锁之后开发者不能进行控制和了解;lock则用起来非常灵活,提供了许多api可以让开发者去控制加锁和释放锁等等。写个Demostatic Lock lock = new R...

weixin_39944542的博客 322

【Lock锁的使用与原理】

Lock锁是Java Concurrency API中的重要机制,它提供了更为灵活和强大的同步控制能力,并支持可重入锁、公平锁等特性。Lock锁的核心原理是基于AQS框架实现的,它通过操作系统提供的原语来控制锁的获取和释放,从而实现线程同步。在使用Lock锁时需要小心谨慎,以免出现死锁和其他同步问题。

我是Java程序员廖志伟,感谢朋友们的支持! 3452

lock锁

1. lock 基本用法 lock.lock(); try { } finally { lock.unlock() } 或者 try { lock.lock(); } finally { lock.unlock() } public class ThreadLock1 { public static void main(String[] args) { //1. 创建锁对象 Lock lock = new Reent...

m0_48273471的博客 2980
上一篇: wait()和notify()
下一篇: 关于多态
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值