博客
关于我
Java并发编程--04 | 互斥锁(下):如何用一把锁保护多个资源?
阅读量:553 次
发布时间:2019-03-09

本文共 901 字,大约阅读时间需要 3 分钟。

一:细粒度锁

相关的示例代码如下,账户类 Account 有两个成员变量,分别是账户余额 balance 和账户密码 password。取款 withdraw() 和查看余额 getBalance() 操作会访问账户余额 balance,我们创建一个 final 对象 balLock 作为锁(类比球赛门票);而更改密码 updatePassword() 和查看密码 getPassword() 操作会修改账户密码 password,我们创建一个 final 对象 pwLock 作为锁(类比电影票)。不同的资源用不同的锁保护,各自管各自的。

class Account {  // 锁:保护账户余额  private final Object balLock    = new Object();  // 账户余额    private Integer balance;  // 锁:保护账户密码  private final Object pwLock    = new Object();  // 账户密码  private String password;  // 取款  void withdraw(Integer amt) {    synchronized(balLock) {      if (this.balance > amt){        this.balance -= amt;      }    }  }   // 查看余额  Integer getBalance() {    synchronized(balLock) {      return balance;    }  }  // 更改密码  void updatePassword(String pw){    synchronized(pwLock) {      this.password = pw;    }  }   // 查看密码  String getPassword() {    synchronized(pwLock) {      return password;    }  }}

 

 

 

 

转载地址:http://elqsz.baihongyu.com/

你可能感兴趣的文章
MySQL 内核深度优化
查看>>
mysql 内连接、自然连接、外连接的区别
查看>>
mysql 写入慢优化
查看>>
mysql 分组统计SQL语句
查看>>
Mysql 分页
查看>>
Mysql 分页语句 Limit原理
查看>>
MySql 创建函数 Error Code : 1418
查看>>
MySQL 创建新用户及授予权限的完整流程
查看>>
mysql 创建表,不能包含关键字values 以及 表id自增问题
查看>>
mysql 删除日志文件详解
查看>>
mysql 判断表字段是否存在,然后修改
查看>>
MySQL 到底能不能放到 Docker 里跑?
查看>>
mysql 前缀索引 命令_11 | Mysql怎么给字符串字段加索引?
查看>>
mysql 协议的退出命令包及解析
查看>>
mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
查看>>
mysql 四种存储引擎
查看>>
MySQL 基础模块的面试题总结
查看>>
MySQL 备份 Xtrabackup
查看>>
mysql 多个表关联查询查询时间长的问题
查看>>
mySQL 多个表求多个count
查看>>