package try51.thread.safe;

import java.util.ArrayList;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; public class LockDemo {
public static void main(String[] args) {
// 所有票源
ArrayList<Thread> lst = new ArrayList<>();
lst.add(new Thread(new Tickets2("网上 售票")));
lst.add(new Thread(new Tickets2("手机APP 售票")));
lst.add(new Thread(new Tickets2("实地窗口售票"))); // 随机产生一个客户端类型
Random rdom = new Random();
// 设置一个线程池
ExecutorService es = Executors.newFixedThreadPool(100);
// 模拟有 15个客户端 来购票
for (int i = 0; i < 15; i++) {
int index = rdom.nextInt(3);
Thread thread = lst.get(index);
// 购票线程进入线程池
es.submit(thread);
}
// 关闭线程池
es.shutdown();
}
} /**
*
* @author lztkdr
*
*/
class Tickets2 implements Runnable { // 安全锁对象
public static Lock locker = new ReentrantLock(); // 静态的票总数(固定)
public static int TicketCount = 10; public String name; /**
*
* @param name
* 客户端 票源
*/
public Tickets2(String name) {
this.name = name;
} @Override
public void run() {
// 线程锁 队列式 售票
locker.lock();
try {
// 模拟购票需要200毫秒
Thread.sleep(200);
if (TicketCount > 0) {
System.out.println(this.name + "\t出售1一张,剩余\t " + (--TicketCount));
} else {
System.out.println(this.name + "\t沒有抢到票!!!");
} } catch (InterruptedException e) {
e.printStackTrace();
} finally {
locker.unlock();
}
}
}

最新文章

  1. BZOJ 3809: Gty的二逼妹子序列
  2. 2Struts2基础----青软S2SH(笔记)
  3. 转 Visual C++ 将整合Clang
  4. October 13th 2016 Week 42nd Thursday
  5. java 字节流和字符流的区别 转载
  6. YTU 3006: 迷宫问题(栈与队列)
  7. linux下jdk安装 failed /usr/local/jdk1.6.0_10/jre/lib/i386/client/libjvm.so
  8. acdream 1738 世风日下的哗啦啦族I 分块
  9. ModelAndView
  10. curl 命令详解(转)
  11. ubuntu 下面手动安装jdk
  12. AFNetworking2.0和AFNetworking3.0 的HTTPS的配置
  13. lua 数据类型
  14. Flutter中使用sqlite
  15. Pandas 基础(15) - date_range 和 asfreq
  16. ESB简介及选型(转) http://www.cnblogs.com/skyme/archive/2012/08/06/2623414.html
  17. spring中整合memcached,以及创建memcache的put和get方法
  18. webpack常用loader和plugin及打包速度优化
  19. C# 如何物理删除有主外键约束的记录?存储过程实现
  20. 分布式全文搜索引擎ElasticSearch

热门文章

  1. HTML5标签canvas制作平面图
  2. 使用d3.v3插件绘制出svg图
  3. Jquery/js submit()无法提交问题
  4. ios开发之--复制到剪切板
  5. iOS protocbuf安装使用
  6. 绑定方式开始服务&amp;调用服务的方法
  7. GreenPlum数据库安装
  8. Win10 如何安装 Ubuntu
  9. linux 开机自启脚本
  10. N76E003之ISP