java 22 - 14 JDK1.5以后的Lock锁
2024-08-31 22:57:36
在之前解决线程安全的过程中,虽然我们可以理解同步代码块和同步方法的锁对象问题,
但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,
为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock。
注意:Lock是个接口。
2个常用方法:
void lock(): 获取锁。
void unlock():释放锁。
ReentrantLock是Lock的实现类。
public class SellTicket implements Runnable {//别忘了这个继承接口
// 定义100张票
private int tickets = 100; // 定义锁对象
private Lock lock = new ReentrantLock(); public void run() { //这里使用了不带catch的try..finally的格式,中间的代码出现问题了,就直接执行finally while (true) {
try { // 加锁,在会出现错误的代码前加锁,跟之前的一样
lock.lock(); if (tickets > 0) { // 休眠0.1秒
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} System.out.println(Thread.currentThread().getName()
+ "正在出售第" + (tickets--) + "张票");
}
} finally {
// 解锁 中间代码一有异常,就解锁,
lock.unlock();
}
}
}
}
最新文章
- bzoj1588
- linux test 命令使用
- FL2440驱动添加(1):hello world 驱动模块添加
- LINUX 用户’nobody’
- Think Python - Chapter 18 - Inheritance
- ANDROID内存优化——大汇总(转)
- Java API设计CheckList
- Spring Boot MyBatis 连接数据库
- 【转载】python 模块 - random生成随机数模块
- 使用socket实现的ftp文件传输服务器
- eclipes快捷键
- 从输入URL到页面加载的全过程
- L2-028 秀恩爱分得快(模拟)
- Jenkins+Ansible+Gitlab自动化部署三剑客-Ansible本地搭建
- Eureka与ZooKeeper 的比较(转)
- Servlet基本_画面遷移
- 关于xml中自动提示功能的设置
- WebStorm project 打开多个项目的方法
- Opencv2教程一:图像变换之阈值二值threshold
- Linux 环境 HTTP 服务器