import java.util.Random;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Semaphore;
import java.util.concurrent.SynchronousQueue; import sun.awt.geom.AreaOp.IntOp; /**
*
* @author Administrator
* 多线程停车系统模型
*/
public class test2 {
// private static final SynchronousQueue<String> sq = new SynchronousQueue<String>();
//新建5个停车位
Random random = new Random(); private static final BlockingQueue<String> carPakingSpace = new ArrayBlockingQueue<String>(5);
// private void parkingSeat(String cars) {
// System.out.println(cars+"停车");
// }
public static void main(String[] args) {
new test2().Cars();
}
// 车位系统
// privat5e void //初始化车辆
private void Cars() { //现有20辆车子要来停车,但是每1秒只能停1辆车子
final Semaphore _Semaphore = new Semaphore(1);
for(int i=0 ; i<20; i++) {
new Thread(new Runnable() { public void run() {
// while(true) { try {
_Semaphore.acquire();
pakingCars(Thread.currentThread().getName()); //每一秒只能停1辆车
Thread.sleep(1000);
_Semaphore.release(); //模拟停车的时间
Thread.sleep(random.nextInt(4000)+1000);
//离开了
leaveCars(Thread.currentThread().getName()); } catch (InterruptedException e) { e.printStackTrace();
} }
}).start();
}
} //准备离开的车
private void leaveCars(String cars) {
try {
System.out.println(carPakingSpace.take()+"-----离开了");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//停车
private void pakingCars(String cars) {
try {
carPakingSpace.put(cars);
System.out.println(cars+": 停车");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
Thread-0: 停车
Thread-1: 停车
Thread-2: 停车
Thread-0-----离开了
Thread-3: 停车
Thread-4: 停车
Thread-5: 停车
Thread-1-----离开了
Thread-6: 停车
Thread-2-----离开了
Thread-3-----离开了
Thread-7: 停车
Thread-4-----离开了
Thread-8: 停车
Thread-5-----离开了
Thread-6-----离开了
Thread-9: 停车
Thread-10: 停车
Thread-7-----离开了
Thread-11: 停车
Thread-8-----离开了
Thread-9-----离开了
Thread-12: 停车
Thread-13: 停车
Thread-10-----离开了
Thread-14: 停车
Thread-15: 停车
Thread-11-----离开了
Thread-16: 停车
Thread-12-----离开了
Thread-17: 停车
Thread-13-----离开了
Thread-18: 停车
Thread-14-----离开了
Thread-19: 停车
Thread-15-----离开了
Thread-16-----离开了
Thread-17-----离开了
Thread-18-----离开了
Thread-19-----离开了

java多线程模拟停车系统的更多相关文章

  1. java多线程模拟生产者消费者问题,公司面试常常问的题。。。

    package com.cn.test3; //java多线程模拟生产者消费者问题 //ProducerConsumer是主类,Producer生产者,Consumer消费者,Product产品 // ...

  2. 使用Redis中间件解决商品秒杀活动中出现的超卖问题(使用Java多线程模拟高并发环境)

    一.引入Jedis依赖 可以新建Spring或Maven工程,在pom文件中引入Jedis依赖: <dependency> <groupId>redis.clients< ...

  3. 【java多线程】队列系统之说说队列Queue

    转载:http://benjaminwhx.com/2018/05/05/%E8%AF%B4%E8%AF%B4%E9%98%9F%E5%88%97Queue/ 1.简介 Queue(队列):一种特殊的 ...

  4. 用java多线程模拟数据库连接池

    模拟一个ConnectionDriver,用于创建Connection package tread.demo.threadpool; import java.lang.reflect.Invocati ...

  5. 【java多线程】队列系统之LinkedBlockingQueue源码

    转载:https://blog.csdn.net/tonywu1992/article/details/83419448 http://benjaminwhx.com/archives/ 1.简介 上 ...

  6. java多线程模拟红绿灯案例

    代码Lighter.java: package pack1; /** * 灯线程 * @author Administrator * */ public class Lighter extends T ...

  7. 【java多线程】队列系统之DelayQueue源码

    一.延迟队列 延迟队列,底层依赖了优先级队列PriorityBlockingQueue 二.延迟队列案例 (1)延迟队列的任务 public class DelayTask implements De ...

  8. 【java多线程】队列系统之PriorityBlockingQueue源码

    一.二叉堆 如题,二叉堆是一种基础数据结构 事实上支持的操作也是挺有限的(相对于其他数据结构而言),也就插入,查询,删除这一类 对了这篇文章中讲到的堆都是二叉堆,而不是斜堆,左偏树,斐波那契堆什么的  ...

  9. 【java多线程】队列系统之LinkedBlockingDeque源码

    1.简介 上一篇我们介绍了 LinkedBlockingDeque 的兄弟篇 LinkedBlockingQueue .听名字也知道一个实现了 Queue 接口,一个实现了 Deque 接口,由于 D ...

随机推荐

  1. Webpack+React配合开发

    前面两篇关于webpack的基础和进阶,请先务必阅读之前的文章. Webpack教程一 Webpack教程二 什么是React React是一个由Facebook开发的library,它的口号是“A ...

  2. 初始JSON

    SON是一种传输数据的格式(以对象为样板,本质上就是对象,但用途有区别,对象就是本地用的,json是用来传输的 JSON的两种静态方法: 1.JSON.parse();  string --> ...

  3. JS异步加载的三种方式

    js加载的缺点:加载工具方法没必要阻塞文档,过得js加载会影响页面效率,一旦网速不好,那么整个网站将等待js加载而不进行后续渲染等工作. 有些工具方法需要按需加载,用到再加载,不用不加载,. 默认正常 ...

  4. http://blog.csdn.net/woshiyjk/article/details/7895888

    http://blog.csdn.net/woshiyjk/article/details/7895888

  5. C语言学习资料(转载)

    ◆经典C源程序100例:http://post.baidu.com/f?kz=8618367 ◆时钟的驻留程序:http://post.baidu.com/f?kz=10822377 ◆数据结构暨若干 ...

  6. iphone 异常捕获处理

    iphone 异常捕获处理 1 void UncaughtExceptionHandler(NSException *exception) { 2 NSArray *arr = [exception ...

  7. hdu 2964 Prime Bases(简单数学题)

    按照题意的要求逐渐求解: #include<stdio.h> #include<string.h> #include<algorithm> using namesp ...

  8. Python概述_软件安装_常见问题

    1.  Python安装 目前python有2个大版本,2和3,由于2和3语法有差别,现有的许多库都是基于python2开发,本系列文章以python2为主. 1.1  重要概念 1. 动态语言 运行 ...

  9. eclipse:failed to create the java virtual machine

    今天eclipse出现failed to create the java virtual machine无法启动,在网上找了解决办法如下: 找到eclipse目录下的eclipse.ini,可以看到如 ...

  10. 新Android工程src和layout文件夹为空

    问题:SDK和ADT版本冲突 解决方案: 1.菜单->Help->Install  New Software.. 2.在work with放入地址:http://dl-ssl.google ...