/**
*
*/
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多线程模拟停车位问题的更多相关文章

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

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

  2. java多线程模拟停车系统

    import java.util.Random; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent ...

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

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

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

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

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

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

  6. java多线程模拟龟兔赛跑

    让乌龟和兔子在同一个赛道从1开始跑到100,看看谁更快. public class Racer implements Runnable{ private static String winner;// ...

  7. Java多线程-并发协作(生产者消费者模型)

    对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的.就像学习每一门编程语言一样,Hello World!都是最经典的例子. 实际上,准确说应该是“生产者-消费者-仓储”模型,离开了仓 ...

  8. Java 多线程:什么是线程安全性

    线程安全性 什么是线程安全性 <Java Concurrency In Practice>一书的作者 Brian Goetz 是这样描述"线程安全"的:"当多 ...

  9. 2018.4.17 java多线程练习二模拟开场仪式进场

    2.某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程, 并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码.线程 ...

随机推荐

  1. IIPP迷你项目(三)“Stopwatch: The Game”

    0 本周项目说明 这一次博客是Coursera的IIPP课程第三周迷你项目的实现,基础要求是做一个秒表,能start能stop能reset,更高的要求是在此秒表的基础上完成两个小游戏,但是鉴于第二个小 ...

  2. python清除字符串中间空格的方法

    1.使用字符串函数replace >>> a = 'hello world' >>> a.replace(' ', '') 'helloworld' 看上这种方法真 ...

  3. python系列六:Python3元组tuple

    '''元组与列表类似,不同之处在于元组的元素不能修改.元组使用小括号,列表使用方括号.''''''uple元素不可变有一种特殊情况,当元素是可变对象时.对象内部属性是可以修改的!tuple的不可变限制 ...

  4. 接口测试工具 — postman(get请求)

    一.Postman说明 Postman是一种网页调试与发送网页http请求的chrome插件.我们可以用来很方便的模拟get或者post或者其他方式的请求来调试接口. 二.postman安装(略) 三 ...

  5. Java语言实现简单FTP软件------>FTP软件主界面的实现(四)

    首先看一下该软件的整体代码框架                        1.首先介绍程序的主入口FTPMain.java,采用了一个漂亮的外观风格 package com.oyp.ftp; im ...

  6. Android系统移植与调试之------->如何修改Android的默认语言、默认时区

    修改device/other/TBDG1073/ system.prop文件 1.设置默认语言 找到device/other/TBDG1073/ system.prop文件,修改属性ro.produc ...

  7. java设计模式学习 ----- 工厂方法模式(Factory Method)

    工厂方法模式(Factory Method) 工厂方法模式分为三种:普通工厂模式.多个工厂方法模式.静态工厂方法模式 普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建. 关系图 ...

  8. android密码显示和隐藏

    if (showPwd){ //设置EditText文本为可见的 password.setTransformationMethod(HideReturnsTransformationMethod.ge ...

  9. FSR薄膜压力传感器使用教程

    FSR薄膜压力传感器教程 本店常用的外形有2种: 圆形: 长条形: 如果用单片机控制建议买带转换的,可以直接接单片机AD口或者数字IO去读取数值: 电压输出的AO接口是模拟量输出,可以接单片机的模拟口 ...

  10. numpy的random模块详细解析

    随机抽样 (numpy.random) 简单的随机数据 rand(d0, d1, ..., dn) 随机值 >>> np.random.rand(3,2) array([[ 0.14 ...