java多线程模拟停车位问题
/**
*
*/
package Synchronized; /**
* @author libin
*
*/
public class CarTest {
public static void main(String[] args) {
CarSet car1 = new CarSet();
Thread t1 = new InThread("1",car1);
Thread t2 = new InThread("2",car1);
Thread t3 = new InThread("3",car1);
Thread t4 = new OutThread("4",car1);
Thread t5 = new OutThread("5",car1);
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
} }
class InThread extends Thread //入库线程
{
String name;
CarSet car;
public InThread(){}
public InThread(String name,CarSet car)
{
super(name);
this.car = car;
}
public void run()
{
car.CarIn();
}
}
class OutThread extends Thread
{
String name;
CarSet carSet;
public OutThread(){}
public OutThread(String name,CarSet carSet)
{
super(name);
this.carSet = carSet;
}
public void run()
{
carSet.CarOut();
}
} class CarSet
{
//String carName;
private boolean[] place = new boolean[3];
public CarSet(){}
// public CarSet(String carSetName)
// {
// this.carName = carSetName;
// }
public synchronized void CarIn()
{
try
{
if(place[0]&&place[1]&&place[2])
{
System.out.println("车位已满,请等待。");
wait();
}
for(int i = 0; i < 3; i++)
{
if(place[i] == false)//车位空,可以入库
{
System.out.println(Thread.currentThread().getName()+"可以入"+i+"号库");
place[i] = true;
notifyAll();
break;
} }
}
catch(InterruptedException e)
{
e.printStackTrace();
} }
public synchronized void CarOut()
{
try
{
if(!(place[0]||place[1]||place[2]))
{
wait();
}
for(int i = 0; i < 3; i++)
{
if(place[i] == true)//车在库内,可以出库
{
System.out.println(Thread.currentThread().getName()+"可以从"+i+"号库出库");
place[i] = false;
notifyAll();
break;
}
}
}
catch(InterruptedException e)
{
e.printStackTrace();
} }
}
java多线程模拟停车位问题的更多相关文章
- java多线程模拟生产者消费者问题,公司面试常常问的题。。。
package com.cn.test3; //java多线程模拟生产者消费者问题 //ProducerConsumer是主类,Producer生产者,Consumer消费者,Product产品 // ...
- java多线程模拟停车系统
import java.util.Random; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent ...
- 使用Redis中间件解决商品秒杀活动中出现的超卖问题(使用Java多线程模拟高并发环境)
一.引入Jedis依赖 可以新建Spring或Maven工程,在pom文件中引入Jedis依赖: <dependency> <groupId>redis.clients< ...
- 用java多线程模拟数据库连接池
模拟一个ConnectionDriver,用于创建Connection package tread.demo.threadpool; import java.lang.reflect.Invocati ...
- java多线程模拟红绿灯案例
代码Lighter.java: package pack1; /** * 灯线程 * @author Administrator * */ public class Lighter extends T ...
- java多线程模拟龟兔赛跑
让乌龟和兔子在同一个赛道从1开始跑到100,看看谁更快. public class Racer implements Runnable{ private static String winner;// ...
- Java多线程-并发协作(生产者消费者模型)
对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的.就像学习每一门编程语言一样,Hello World!都是最经典的例子. 实际上,准确说应该是“生产者-消费者-仓储”模型,离开了仓 ...
- Java 多线程:什么是线程安全性
线程安全性 什么是线程安全性 <Java Concurrency In Practice>一书的作者 Brian Goetz 是这样描述"线程安全"的:"当多 ...
- 2018.4.17 java多线程练习二模拟开场仪式进场
2.某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程, 并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码.线程 ...
随机推荐
- 【BZOJ4448】[Scoi2015]情报传递 主席树+LCA
[BZOJ4448][Scoi2015]情报传递 Description 奈特公司是一个巨大的情报公司,它有着庞大的情报网络.情报网络中共有n名情报员.每名情报员能有若干名(可能没有)下线,除1名大头 ...
- MongoDB实践-自定义ASP.NET Session Store
Session由来 由于HTTP协议是无状态的,客户端与服务器端进行“请求-响应”操作后,建立的连接就释放了,服务器端根本不知道刚才是哪个客户端访问的.但是有些场景是需要知道客户端的状态的,最典型的就 ...
- IOS开发复习笔记(3)-ARC
1.ARC 当你自己调用了release或retain语句的时候,ARC有效时编译文件会遇到错误,你可以通过-fno-objc-arc和-fobjc-arc两个编译器标志在混搭中支持ARC和非ARC的 ...
- HTP 302 SEO作弊
w 李智慧
- Java基础 - 函数与方法
java 是一门面向对象编程,其它语言中的函数也就是java中的方法 方法的基本使用方法 package com.demo7; /* * 函数/方法 * * 定义格式: * 修饰符 返回值类型 方法名 ...
- 关于handler内存泄露的问题
在使用Handler更新UI的时候.我是这样写的: public class SampleActivity extends Activity { private final Handler mLeak ...
- java设计模式学习 ----- 工厂方法模式(Factory Method)
工厂方法模式(Factory Method) 工厂方法模式分为三种:普通工厂模式.多个工厂方法模式.静态工厂方法模式 普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建. 关系图 ...
- selenium 用autoIT上传下载文件
一.下载安装AutoIT 下载并安装AutoIT,下载链接:https://www.autoitscript.com/site/autoit/ AutoIT安装成功后,可以在开始菜单下看到AutoIT ...
- 修改Linux的基本配置(修改主机名修改ip地址安装JDK/Tomcat/MySQL等等)
(一)基本操作修改 修改主机名 vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=server1.itcast.cn 修改ip地址 vi /etc/s ...
- Django——admin组件
Django提供了基于web的管理工具. Django自动管理工具是django.contrib的一部分.你可以在项目的settings.py中的INSTALLED_APPS看到它: # Applic ...