多线程 —— 使用代码显式加锁
来源:互联网 发布:java 集合框架详解 编辑:程序博客网 时间:2024/05/22 07:05
以前我们都是使用 synchronized 关键字来保证同步的。现在我们使用同步锁,使得同步的概念体现得更加清晰。
例:卖票程序
/** * Created by liwei on 16/7/18. * * 在这个线程的例子里,因为添加了同步锁, * 才得以保证买票的事情在三个线程里有序执行者。 * 这一点希望用心体会。 * * */public class SellTicket implements Runnable { // 定义票数 private Integer tickets = 100; // 定义锁对象 private Lock lock = new ReentrantLock(); @Override public void run() { while (true){ try{ // 加锁 lock.lock(); if(tickets>0){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "正在出第" + (tickets--) + "张票。"); } }finally { // 释放锁 lock.unlock(); } } }}
测试方法:
/** * Created by liwei on 16/7/18. * * 测试方法:加上线程锁和不加线程锁的区别。 * *//* * 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁, * 为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock。 * * Lock: * void lock(): 获取锁。 * void unlock():释放锁。 * ReentrantLock是Lock的实现类. */public class SellTicketDemo { public static void main(String[] args) { // 创建资源对象 SellTicket st = new SellTicket(); // 创建三个窗口 Thread t1 = new Thread(st,"win1"); Thread t2 = new Thread(st,"win2"); Thread t3 = new Thread(st,"win3"); // 启动线程 t1.start(); t2.start(); t3.start(); }}
0 0
- 多线程 —— 使用代码显式加锁
- libcurl 多线程使用注意事项(补充)——HTTPS,openssl多线程使用加锁
- Java多线程——加锁机制
- 黑马程序员——java中关于同步函数(或同步代码块)解决多线程安全问题的加锁
- iOS开发——多线程加锁常用方法
- 多线程经典——生产者消费者问题(加锁版)
- 多线程加锁
- 多线程加锁
- 多线程加锁
- java基础--25.多线程的改进--Lock显式地加锁和释放锁
- 多线程NSThread安全隐患与解除方法—— 利用加锁@synchronized(){}来解决
- C/C++ Windows API——多线程加锁与临界区域
- 多线程经典——生产者消费者问题(未加锁版)
- Java 多线程加锁
- 多线程读写文件 加锁
- object-c 多线程 加锁
- java 多线程 加锁
- object-c 多线程 加锁
- 求点连通度,边连通度
- centOS6下配置网络,解决上网问题
- Java千百问_09基础类库(004)_java.lang.management包有什么功能
- URL
- hdu 5750 Dertouzos(数论,打表,暴力)
- 多线程 —— 使用代码显式加锁
- python 增加csdn访问量升级
- 红黑树分析
- windows程序设计学习笔记--动态链接库
- Mybatis框架运行机制(增删改查,一对一,一对多,日志系统,单元测试,版本控制,缓存,动态Sql)
- python: ()&[ ]
- Linux系统调用:进程的终止
- POJ 2785 4 Values whose Sum is 0二分入门
- 解决Eclipse建立Maven项目后无法建立src/main/java资源文件夹的办法