`

java线程简单模拟交通灯

    博客分类:
  • java
 
阅读更多

最近温习多线程通信,所以用多线程简单模拟了交通灯,感觉自己对线程方面的东西又有了进一步的理解。

通过这个模拟明白了notify(),与wait()又一些特点。
下面将代码贴上:


交通灯类:

package com.xxg.entiry;

public class Light {
	public int num = 20;// 南北方向和东西方向总计时间为20秒
	public String color;

	
	public Light(String color){
		
	  this.color = color;	
	}
	
	public synchronized void EtoW(){
	  while(true){
		  System.out.println("东西方向等候10秒,南北方向通行");
	 while(num>10)
		 {   try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
			 num--;
		   System.out.println(num-10+"-----------[当前线程为]--------"+Thread.currentThread().getName());
		   
		 }
		 {
		  while(num<=10)
		   {   
			
			  try {
				notify();
				wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		   }
		 }
	  }
		
	}
  
	public synchronized void NtoS() throws InterruptedException{
	     while(true){
	    
		  System.out.println("南北方向等候10秒,东西方向通行");
		
	  
		 while(num>=10&&num<20)
		 {   try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}    
			 num++;
		   System.out.println(num-10+"------------[当前线程为]------------"+Thread.currentThread().getName());
		   
		 }
		 if(num==20)
			 notify();
		     wait();
	
	}
	}
}

//======================实现控制东西方向的线程=====================
package com.xxg.inter;

import com.xxg.entiry.Light;

public class Threa1 extends Thread{
	
	public Light light;

	public Threa1(Light light) {
		
		this.light = light;
	}
	
	 
	public void run() {
		
	    light.EtoW();		
	}
}
//======================实现控制南北方法的线程=======================
package com.xxg.inter;

import com.xxg.entiry.Light;

public class Threa2 extends Thread{
	
	public Light light;

	public Threa2(Light light) {
		
		this.light = light;
	}
	
	 
	public void run() {
	  
	    try {
			light.NtoS();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
		
	}

}
//============================Test=============================
package com.xxg.test;

import com.xxg.entiry.Light;
import com.xxg.inter.Threa1;
import com.xxg.inter.Threa2;

public class Test {

	
	public static void main(String[] args) {
		
		Light li = new Light("red");
		Thread t1 = new Threa1(li);
		Thread t2 = new Threa2(li);
		t1.start();
		try {
			Thread.sleep(1000);
			
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		t2.start();
		

	}

}
//=========================测试结果================================
东西方向等候10秒,南北方向通行
9-----------[当前线程为]--------Thread-0
8-----------[当前线程为]--------Thread-0
7-----------[当前线程为]--------Thread-0
6-----------[当前线程为]--------Thread-0
5-----------[当前线程为]--------Thread-0
4-----------[当前线程为]--------Thread-0
3-----------[当前线程为]--------Thread-0
2-----------[当前线程为]--------Thread-0
1-----------[当前线程为]--------Thread-0
0-----------[当前线程为]--------Thread-0
南北方向等候10秒,东西方向通行
1------------[当前线程为]------------Thread-1
2------------[当前线程为]------------Thread-1
3------------[当前线程为]------------Thread-1
4------------[当前线程为]------------Thread-1
5------------[当前线程为]------------Thread-1
6------------[当前线程为]------------Thread-1
7------------[当前线程为]------------Thread-1
8------------[当前线程为]------------Thread-1
9------------[当前线程为]------------Thread-1
10------------[当前线程为]------------Thread-1
东西方向等候10秒,南北方向通行


收获:
1.wait()的进一步理解:如果一个线程调用了某个对象的wait方法,那么该线程进入到该对象的等待池中(并且已经将锁释放),
如果未来的某一时刻,另外一个线程调用了相同对象的notify方法或者notifyAll方法,
那么该等待池中的线程就会被唤起,然后进入到对象的锁池里面去获得该对象的锁,
如果获得锁成功后,那么该线程就会沿着wait方法之后的路径继续执行。注意是沿着wait方法之后  
 


2.notify()方法为唤醒同一个对象的锁。比如说a.notify()方法之能唤醒对应a.wait()方法调用的线程,而不能唤醒b.wait()对应的线程。
调用notify()方法并不代表释放当前对象的锁。它只是去通知其他线程进入到锁池里面去,而这个线程也不一定立即获的对象锁。
分享到:
评论

相关推荐

    一个模拟交通灯的JAVA源代码.rar

    可以创建一个单独的线程来定期调用`changeState()`方法,模拟交通灯自动切换的过程。 此外,为了可视化交通灯的状态,可以使用Java Swing或JavaFX创建一个简单的图形用户界面(GUI)。这将允许用户直观地看到交通灯...

    交通灯模拟程序 交通灯模拟程序 交通灯模拟程序

    交通灯模拟程序是一种基于计算机编程的实践项目,主要用于教授学生如何使用特定的编程语言,如JAVA,来实现复杂的逻辑控制和多线程技术。在这个项目中,学生将学习到如何设计一个模拟真实世界交通规则的系统,这涉及...

    使用Java模拟交通信号灯.zip

    在本项目中,“使用Java模拟交通信号灯”是一个典型的编程实践,主要涵盖了计算机科学中的并发处理、模拟与仿真以及软件工程的基本概念。这个毕业设计旨在通过编程实现一个交通信号灯控制系统,来理解和应用Java语言...

    模拟交通灯的JAVA源代码

    在本文中,我们将深入探讨如何使用Java编程语言来模拟交通灯系统。交通灯控制系统是城市交通管理中的核心组成部分,它确保了车辆和行人的安全流动。通过编写Java源代码,我们可以理解并实践基本的编程概念,如循环、...

    Java 交通灯 简单GUI编程

    Java交通灯简单GUI编程是一个基础的程序设计项目,它展示了如何使用Java Swing库来创建一个图形用户界面(GUI),模拟交通灯的周期性变化。在这个项目中,我们通常会涉及三个核心类:计数类、监听类和基于Swing的...

    模拟交通灯

    在本文中,我们将深入探讨如何使用Java编程语言模拟交通灯系统,这主要涉及到线程(Thread)和图形用户界面(GUI)的相关知识。这个小项目是基于书籍中的一个示例,经过改造后,使得它更接近于实际十字路口的交通灯...

    JAVA实现交通灯

    本文将深入探讨如何使用Java语言来实现一个简单的交通灯控制系统。交通灯系统是城市交通流的关键组成部分,它通过红绿黄三色灯的交替变化来协调车辆和行人的通行。 首先,我们需要理解交通灯的基本工作原理。...

    JAVA交通灯程序,大学上JAVA课的作业

    Java交通灯程序是一种模拟现实生活中交通信号灯运作的软件应用,通常用于教学目的,帮助学生理解和实践面向对象编程、多线程以及事件处理等Java核心概念。在这个大学JAVA课的作业中,学生们被要求设计一个能够模拟...

    交通灯设计(GUI)多线程

    在这个交通灯系统中,我们可以创建一个窗口,用三个不同的JLabel分别代表红、黄、绿灯,通过改变这些标签的颜色来模拟交通灯的状态变化。 在设计多线程部分,我们需要考虑如何协调各个线程的执行顺序。一种常见方法...

    java写的红绿灯演示程序多线程

    在这个红绿灯演示程序中,可能会有三个线程分别代表红、绿、黄灯,每个灯的亮灭由一个单独的线程控制,以模拟真实的交通信号灯行为。 线程的同步和通信是多线程编程中的重要概念。为了确保红绿灯的正确交替,程序...

    用java做的一个交通灯

    4. **主循环**:在主程序中,创建`TrafficLight`对象并进入一个无限循环,不断调用`switchState()`方法,模拟交通灯的运行。 ```java public static void main(String[] args) { TrafficLight light = new Traffic...

    Java 源代码实现红绿灯模拟

    在本文中,我们将深入探讨如何使用Java编程语言来模拟现实生活中的交通红绿灯系统。这个系统的核心在于理解和应用线程同步、定时任务以及状态管理等关键概念。 首先,我们需要理解红绿灯的基本工作原理。一个典型的...

    十字路口交通模拟程序设计分析(JAVA)

    本案例通过 Java 多线程技术和 Amino 并发组件实现了一个简单的十字路口交通模拟程序。该程序不仅展示了如何有效地利用多线程技术解决复杂的并发问题,还提供了对交通信号灯控制系统的深入理解。通过对程序的设计、...

    java交通灯管理系统源码和文档

    交通灯需要按照特定的顺序和间隔时间进行切换,这就需要用到Java的线程机制。`Thread`类或`Runnable`接口可能会被用来创建和管理这些交替进行的任务。同时,为了避免线程间的竞态条件,可能使用`synchronized`关键字...

    交通灯小程序

    通过定义状态之间的转换规则,可以模拟交通灯的周期性变化。 3. **多线程**:为了实现交通灯的并行操作,如南北向和东西向的灯交替变化,Java的多线程技术至关重要。可以使用`Thread`类或`Runnable`接口创建多个...

    基于java实现多线程对交通路口红绿灯和汽车的关系模拟

    模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行驶的车辆。 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- 右转车辆 由东向而来去往南向...

    信号灯模拟

    标题“信号灯模拟”指的是一个使用Java编程语言实现的程序,该程序旨在模拟交通信号灯的行为。在实际交通中,信号灯系统通过红、黄、绿三种颜色的变化来控制交通流,确保道路的安全和流畅。在软件开发中,模拟这种...

    交通灯的设计与实现Java

    通过定义不同的状态转换规则,如定时器或感应器触发,我们可以模拟交通灯的周期性变化。 接下来,我们需要实现交通灯的控制逻辑。这可以通过事件驱动编程来完成,例如使用Java的`java.util.Timer`和`java.util....

    五星路口交通灯控制系统(Java版)

    【五星路口交通灯控制系统(Java版)】是一个基于Java编程语言实现的交通灯控制系统,专为模拟和管理复杂的交叉路口交通流而设计。这个系统利用Java的面向对象特性,为每个交通灯方向创建独立的对象,以实现灵活的...

Global site tag (gtag.js) - Google Analytics