java多线程模拟停车系统
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多线程模拟停车系统的更多相关文章
- java多线程模拟生产者消费者问题,公司面试常常问的题。。。
		package com.cn.test3; //java多线程模拟生产者消费者问题 //ProducerConsumer是主类,Producer生产者,Consumer消费者,Product产品 // ... 
- 使用Redis中间件解决商品秒杀活动中出现的超卖问题(使用Java多线程模拟高并发环境)
		一.引入Jedis依赖 可以新建Spring或Maven工程,在pom文件中引入Jedis依赖: <dependency> <groupId>redis.clients< ... 
- 【java多线程】队列系统之说说队列Queue
		转载:http://benjaminwhx.com/2018/05/05/%E8%AF%B4%E8%AF%B4%E9%98%9F%E5%88%97Queue/ 1.简介 Queue(队列):一种特殊的 ... 
- 用java多线程模拟数据库连接池
		模拟一个ConnectionDriver,用于创建Connection package tread.demo.threadpool; import java.lang.reflect.Invocati ... 
- 【java多线程】队列系统之LinkedBlockingQueue源码
		转载:https://blog.csdn.net/tonywu1992/article/details/83419448 http://benjaminwhx.com/archives/ 1.简介 上 ... 
- java多线程模拟红绿灯案例
		代码Lighter.java: package pack1; /** * 灯线程 * @author Administrator * */ public class Lighter extends T ... 
- 【java多线程】队列系统之DelayQueue源码
		一.延迟队列 延迟队列,底层依赖了优先级队列PriorityBlockingQueue 二.延迟队列案例 (1)延迟队列的任务 public class DelayTask implements De ... 
- 【java多线程】队列系统之PriorityBlockingQueue源码
		一.二叉堆 如题,二叉堆是一种基础数据结构 事实上支持的操作也是挺有限的(相对于其他数据结构而言),也就插入,查询,删除这一类 对了这篇文章中讲到的堆都是二叉堆,而不是斜堆,左偏树,斐波那契堆什么的 ... 
- 【java多线程】队列系统之LinkedBlockingDeque源码
		1.简介 上一篇我们介绍了 LinkedBlockingDeque 的兄弟篇 LinkedBlockingQueue .听名字也知道一个实现了 Queue 接口,一个实现了 Deque 接口,由于 D ... 
随机推荐
- ***mysql索引总结----mysql索引类型以及创建
			文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基 ... 
- poj 3522(最小生成树应用)
			题目链接:http://poj.org/problem?id=3522思路:题目要求最小生成树中最大边与最小边的最小差值,由于数据不是很大,我们可以枚举最小生成树的最小边,然后kruskal求最小生成 ... 
- 李洪强漫谈iOS开发[C语言-005]-程序结构分析
- 卷积相关公式的matlab代码
			取半径=3 用matlab代码实现上式公式: length=3;for Ki = 1:length for Kj = 1:length for Kk = 1:length Ksigma(Ki,Kj,K ... 
- C++名字空间/C++命名空间
			0.序言 名字空间是C++提供的一种解决符号名字冲突的方法. 一个命令空间是一个作用域,在不同名字空间中命名相同的符号代表不同的实体. 通常,利用定义名字空间的办法,可以使模块划分更加方便,减少模块间 ... 
- spring定时器,5步完成
			spring定时器,5步完成,我们开发的时候会用定时执行任务. 用spring框架时,可以直接使用spring定时功能 1.创建任务调度类,里面一个方法,方法名为work 2. spring配置文件, ... 
- Java:网络编程之UDP的使用
			java.net 类 DatagramSocket 此类表示用来发送和接收数据报包的套接字,数据报套接字是包投递服务的发送或接收点. java.net 类 DatagramPacket 此类表示数 ... 
- C# 返回泛型
			public static T GetObj(Employee model) { T result = default(T); if (model is T) { result = (T)(objec ... 
- angularjs $watch demo
			<!doctype html> <html lang="en" ng-app> <head> <meta charset="UT ... 
- NDK(11)Android.mk编译APK模板
			转自 : http://hubingforever.blog.163.com/blog/static/1710405792011656434982/ 以下仅是使用Android.mk编译APK程序的 ... 
