码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 基础 | NIO - [FileLock]


    INDEX

        • §1 FileLock
        • §2 ACL

    §1 FileLock

    概述

    • 文件锁是进程级别的锁
      • 可以解决多个进程并发访问
      • 不能解决多线程并发访问修改同一个文件
    • 被进程锁锁住的文件
      • 进程内的所有线程都可以访问修改
      • 其他进程是否可以对文件进行操作由文件锁 性质 决定
      • 当前进程不能重复获取同一个文件的文件锁
    • 文件锁被当前程序所属 JVM 实例持有,只有下列方式可以释放锁
      • 调用 release()
      • 关闭对应的 FileChannel
      • 退出 JVM

    性质
    排它锁
    进程对某文件上锁后,其他进程不能读写此文件

    共享锁
    进程对某文件上锁后,其他进程可以读取此文件

    方法
    加锁
    lock()

    • 阻塞式 对整个文件进行加锁
    • 默认排他锁

    lock(position,size,shared)

    • 阻塞式 自定义加锁方式
    • position + size 可以指定加锁范围
    • shared 可以指定是否是共享锁

    tryLock()

    • 非阻塞式 对整个文件进行加锁
    • 默认排它锁

    tryLock(position,size,shared)

    • 非阻塞式 自定义加锁方式
    • position + size 可以指定加锁范围
    • shared 可以指定是否是共享锁

    解锁
    release()

    示例

    public void filelock(String filePath){
        try (
                FileChannel channel = FileChannel.open(Paths.get(filePath), StandardOpenOption.WRITE,StandardOpenOption.APPEND);
                BufferedReader bf = new BufferedReader(new FileReader(filePath));
        ){
            ByteBuffer buf = ByteBuffer.wrap("0123456789".getBytes(StandardCharsets.UTF_8));
    
            FileLock lock = channel.lock();
            channel.write(buf);
            lock.release();
    
            String line = null;
            while((line = bf.readLine()) != null){
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    §2 ACL

    简介
    Redis ACL = Access Control List,访问控制表
    ACL 相当于一套权限控制,从下面维度控制连接

    • 允许执行的命令
    • 允许访问的键
    • 接入权限,即以前就有的用户名密码
      可以有效大的防止用户执行高危命令,如 flushb、shutown、keys *

    设置
    acl setuser user_name on >password ~key_express +command

    • user_name 用户名
    • password 密码
    • key_express 可以操作的键的表达式
    • command 可以操作的指令
  • 相关阅读:
    [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
    第十一章 : 如何使用Swagger2构建强大的API文档
    6年测试,面试大放厥词,最后竟.....
    【NumPy基础(05)常用函数】
    Java常量:Java常量的定义和分类
    【iOS】锁
    【C语言经典100例题-66】(用指针解决)输入3个数a,b,c,按大小顺序输出。
    【算法与数据结构】--算法基础--算法设计与分析
    Postman接口测试工具,提高SpringBoot开发效率
    windows 各种inject/hook学习材料(自用)
  • 原文地址:https://blog.csdn.net/ZEUS00456/article/details/127112236
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号