通过锁对象实现买票
来源:互联网 发布:湖南有线网络怎样 编辑:程序博客网 时间:2024/06/05 00:26
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class SellTicket implements Runnable{
private int tickets = 100;
//定义锁对象
private Lock lock = new ReentrantLock();
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
try{
//加锁
lock.lock();
if(tickets > 0){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() +"正在出售第" +(tickets--) + "张票");
}
}finally{
//释放锁
lock.unlock();
}
}
}
import java.util.concurrent.locks.ReentrantLock;
public class SellTicket implements Runnable{
private int tickets = 100;
//定义锁对象
private Lock lock = new ReentrantLock();
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
try{
//加锁
lock.lock();
if(tickets > 0){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() +"正在出售第" +(tickets--) + "张票");
}
}finally{
//释放锁
lock.unlock();
}
}
}
}
/*
* 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,
* 为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock
*
* Lock:
* void lock():获取锁
* void unlock():释放锁
* ReentrantLock是Lock的实现类
*/
public class SellTicketDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建资源对象
SellTicket st = new SellTicket();
//创建三个窗口
Thread t1 = new Thread(st,"窗口1");
Thread t2 = new Thread(st,"窗口2");
Thread t3 = new Thread(st,"窗口3");
//启动线程
t1.start();
t2.start();
t3.start();
}
}
0 0
- 通过锁对象实现买票
- 多线程实现买票功能
- 异步锁:火车买票问题
- java多线程买票,同步锁
- java 多线程 实现窗口买票功能
- perl 对象 通过bless实现
- 通过XMLHTTP对象来实现文件下载
- 通过实现接口 ICloneable 复制对象
- 通过__index实现创建子类对象
- 通过Graphics对象来实现动画效果
- 通过Graphics对象来实现动画效果
- PHP通过面向对象实现数据库备份
- 通过反射实现对象转JSON
- 通过反射实现对象转JSON
- 通过XMLHttpRequest对象实现Ajax跳转
- NSCondition模拟买票的过程的简单实现
- java同步代码块 实现的买票功能
- oc编程:电影院买票系统2-----代码实现
- win7旗舰版64位下完美安装和破解loadrunner11
- 在webstorm中怎么配置本地服务器
- 图解Telnet命令和命令行看邮件
- Redis Essentials 读书笔记 - 第三章:Time Series (A Collection of Observations)
- HttpClientGetPost_MultiThreading_ResumeFromBreakPoint
- 通过锁对象实现买票
- 【DSP开发】DSP通用并行端口uPP
- LoadRunner 11 安装及破解
- 在BIOS模式下USB的启动热键是什么?(BIOS设置图解教程)
- PHP的内存限制 Allowed memory size of 134217728 bytes exhausted (tried to allocate 1099 bytes) in
- Hibernate配置文件(hibernate.cfg.xml)
- HDU 1029 Ignatius and the Princess IV
- django 个人博客系统开发 - 文章归档
- mysql如何开启远程连接