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 = "red";
15             System.out.println("lighter:现在是红灯,静止车辆通行");
16             Thread.sleep(10*1000);
17             //10s后灯变绿,设绿灯时间位5秒
18             state = "green";
19             System.out.println("lighter:现在变绿灯了,车辆可以通行了。");
20             Lighter.sleep(5*1000);
21         } catch (InterruptedException e) {
22             System.out.println("出错了:"+e);
23         }
24     }
25 }
26 }

代码Car.java

package pack1;
/**
 * 车辆线程
 * @author Administrator
 *
 */
public class Car extends Thread{
String name="";
//灯作为私有变量,车辆根据灯的状态决定是否要停止
private Lighter lighter;
public Car(String name,Lighter l){
    this.name=name;
    this.lighter=l;
}
public void run(){
    if (lighter.state.equals("red")){
        System.out.println(this.name+":等待中");
    }else{

        System.out.println(this.name+":通过了红绿灯");
    }
}
}

测试代码RglightTest.java

 1 package pack1;
 2 /**
 3  * 红绿灯测试代码
 4  * @author Administrator
 5  *
 6  */
 7 public class RglightTest {
 8 public static void main(String[] args) throws InterruptedException {
 9     Lighter l=new Lighter();
10         //红绿灯开始运行
11     l.start();
12         //生成20个车辆,依次通过红绿灯
13     for(int i=0;i<20;i++){
14         Car c=new Car("car"+i+1,l);
15                 //当前车辆睡眠1s
16         c.sleep(1000);
17         c.start();
18     }
19 }
20 }

原文地址:https://www.cnblogs.com/g177w/p/8371593.html

时间: 2024-10-25 23:26:50

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多线程 生产者消费者案例-虚假唤醒

package com.java.juc; public class TestProductAndConsumer { public static void main(String[] args) { Clerk clerk = new Clerk(); Produce produce = new Produce(clerk); Consumer consumer = new Consumer(clerk); new Thread(produce, "线程A").start(); ne

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

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多线程同步 synchronized 关键字的使用

代表这个方法加锁,相当于不管哪一个线程A每次运行到这个方法时,都要检查有没有其它正在用这个方法的线程B(或者C D等),有的话要等正在使用这个方法的线程B(或者C D)运行完这个方法后再运行此线程A,没有的话,直接运行它包括两种用法:synchronized 方法和 synchronized 块. JAVA多线程买票案例 synchronized 同步 用synchronized 块实现同步 public static void main(String[] args) { // runable对

java多线程经典案例

/** * 典型案例:子线程执行10次,主线程执行100次,两者交替50次. */ package cn.itcast.lesson4; public class TestWaitNotify { public static void main(String[] args){ final Business business= new Business(); new Thread( new Runnable() { public void run() { for(int i=1;i<=50;i++

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