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();
		}

	}
}
时间: 2024-11-09 09:47:18

java多线程模拟停车位问题的相关文章

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

package com.cn.test3; //java多线程模拟生产者消费者问题 //ProducerConsumer是主类,Producer生产者,Consumer消费者,Product产品 //Storage仓库 //批注:我把输出结果写在程序以下了,你能够看一下,事实上非常easy的,你想象一下产品从生产,到取出的一个生产线,我们定义两个线程,生产者线程,和消费者线程,一个是生产者不停的生产产品并放入数量有限的指定槽内,而消费者从指定槽依次取出产品,现实中的流水车间也相似于此. publ

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

java多线程模拟红绿灯案例

代码Lighter.java: 1 package pack1; 2 /** 3 * 灯线程 4 * @author Administrator 5 * 6 */ 7 public class Lighter extends Thread{ 8 //代表灯当前的状态(这里只考虑红绿两种状态) 9 public String state; 10 public void run(){ 11 while (true){ 12 try { 13 //初始状态设为红灯,且红灯时常为10s 14 state

java多线程模拟龟兔赛跑

让乌龟和兔子在同一个赛道从1开始跑到100,看看谁更快. 1 public class Racer implements Runnable{ 2 private static String winner;//胜利者 3 4 @Override 5 public void run() { 6 //赛道 7 for (int step = 1; step <= 100; step++) { 8 /* if(Thread.currentThread().getName().equals("兔子&

java中多线程模拟(多生产,多消费,Lock实现同步锁,替代synchronized同步代码块)

import java.util.concurrent.locks.*; class DuckMsg{ int size;//烤鸭的大小 String id;//烤鸭的厂家和标号 DuckMsg(){ } DuckMsg(int size, String id){ this.size=size; this.id=id; } public String toString(){ return id + " 大小为:" + size; } } class Duck{ private int

JAVA学习第六十课 — UDP协议 &amp;基于多线程模拟简单的QQ聊天程序

UDP传输 UDP有发送端和接受端,有两大类,DatagramSocket.DatagramPacket 建立发送端和接收端 建立数据包 调用Socket的接收发送方法 关闭Socket 注意:发送端和接收端是两个独立的运行程序 UDP发送端演示 DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号. public static voi

java多线程 —— 两种实际应用场景模拟

java多线程-两种实际应用场景模拟 转自 薛定谔的猫 (一) 先说说第一个,模拟对信息的发送和接收.场景是这样的: 就像笔者之前做的消息的发送,一个是服务器,一个是客户端.发送的话,要保证信息100%的发送给客户端,那么发给客户端之后,客户端返回一个消息告诉服务器,已经收到.当服务器一直没有收到客户端返回的消息,那么服务器会一直发送这个信息,直到客户端发送回确认信息,这时候再删除重复发送的这个信息. 为了模拟这个场景,这里写两个线程,一个是发送,一个是接收,把发送的信息,要保存到线程安全的对象

Rhythmk 一步一步学 JAVA (21) JAVA 多线程

1.JAVA多线程简单示例 1.1 .Thread  集成接口 Runnable 1.2 .线程状态,可以通过  Thread.getState()获取线程状态: New (新创建) Runnable (可以运行) Blocked  (被阻塞) Waiting  (等待) Timed waiting (计时等待) Terminated  (被终止) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

Java多线程Future模式

Java多线程Future模式有些类似于Ajax的异步请求Future模式的核心在于:去除了主函数的等待时间,并使得原本需要等待的时间段可以用于处理其他业务逻辑 假设服务器的处理某个业务,该业务可以分成AB两个过程,并且AB两个过程之间不需要彼此的返回结果 A过程需要1秒钟,B过程需要2秒钟,主线程其他操作2秒钟按照正常编写,程序大概需要执行5秒如果按照Future模式只需要执行2秒(取其中运行时间最久的线程的运行时间) Future模式的核心实现在于两个方面 1.多线程运行 主线程采用多线的方