`

wait() 和notify重温

 
阅读更多
重温wait()和notify()


    温故知新,接下来看看线程池。
   
    同时启动3个线程A、B、C,A线程输出A 20次,B线程输出B 20次,C线程输出C 20次,要求输出结果为顺序输出A、B、C、A、B、C。。。



class Agent{
	public static int state = 1;

	public synchronized void sayA() {
		if(state != 1){
			try {
				super.wait();
			} catch (Exception e) {
				// TODO: handle exception
			}
		}
		System.out.println("A");
		state = 2;
		super.notify();
	}
	public synchronized void sayB() {
		if(state != 2){
			try {
				super.wait();
			} catch (Exception e) {
				// TODO: handle exception
			}
		}
		System.out.println("B");
		state = 3;
		super.notify();
	}
	public synchronized void sayC() {
		if(state != 3){
			try {
				super.wait();
			} catch (Exception e) {
				// TODO: handle exception
			}
		}
		System.out.println("C");
		state = 1;
		super.notify();
	}
}

class A extends Thread{
	Agent agent;
	public A(Agent agent){
		this.agent = agent;
	}
	public void run(){
		for(int i=0;i<20;i++){
			try {
				Thread.sleep(200);
			} catch (Exception e) {
			}
			agent.sayA();
		}
	}
}
class B extends Thread{
	Agent agent;
	public B(Agent agent){
		this.agent = agent;
	}
	public void run(){
		for(int i=0;i<20;i++){
			try {
				Thread.sleep(200);
			} catch (Exception e) {
			}
			agent.sayB();
		}
	}
}
class C extends Thread{
	Agent agent;
	public C(Agent agent){
		this.agent = agent;
	}
	public void run(){
		for(int i=0;i<20;i++){
			try {
				Thread.sleep(200);
			} catch (Exception e) {
			}
			agent.sayC();
		}
	}
}

public class TestWait {
	public static void main(String[] args) {
		Agent agent = new Agent();
		new A(agent).start();
		new B(agent).start();
		new C(agent).start();
	}
}



分享到:
评论

相关推荐

    Head First Java 中文高清版

    并发编程则涉及到线程间的协作和同步,如使用synchronized关键字和wait/notify机制来避免线程间的数据竞争。 最后,《Head First Java》会介绍IO流和网络编程。IO流处理输入和输出,如读取文件、接收网络数据等。...

    tank_java.rar_html坦克大战

    此外,线程同步技术也可能被用来确保游戏的实时性和流畅性,例如使用synchronized关键字或者wait/notify机制来处理多坦克同时行动的并发问题。 HTML文件的加入,使得游戏可以通过浏览器直接运行,这可能是利用了...

    北大java讲义ppt

    12. **多线程**:介绍如何创建和管理线程,同步机制如synchronized关键字和wait/notify机制,以及线程池的使用。 13. **接口与抽象类**:对比接口和抽象类的区别,探讨它们在设计模式中的应用。 14. **反射机制**...

    绝对经典JAVA基础60题

    10. 多线程:线程的创建、同步机制(synchronized、wait/notify)、线程池。 通过解决这些题目,学习者可以系统地复习和实践Java基础,进一步增强对Java编程的理解和应用能力。对于初学者来说,这是一个非常有价值...

    java编程思想习题及答案

    6. **多线程**:学习如何创建和管理线程,理解同步机制,如synchronized关键字、wait()、notify()等。通过习题,可以实践多线程编程,解决并发问题。 7. **反射**:掌握Java反射机制,能够动态地获取类的信息并调用...

    Java坦克大战的源文件

    线程间的同步和通信是关键,可能使用wait()、notify()或更高级的并发工具如CountDownLatch和CyclicBarrier。 5. **数据结构与算法**:游戏中可能使用到了多种数据结构,如数组、ArrayList或LinkedList来存储游戏...

    BigJava:我读了Big Java书中的一些我认为很有趣的练习

    8. **多线程**:Java内置对多线程的支持,Thread类和Runnable接口可以创建并管理线程,同步机制(synchronized、wait、notify等)保证了线程安全。 9. **泛型**:泛型引入了类型参数,提高了代码的类型安全性和重用...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    基本信息 作者: 臧萌 出版社:清华大学出版社 ISBN:9787302217831 上架时间:2010-3-30 出版日期:2010 年3月 开本:16开 ... ...Java编程老鸟潜心写作,奉献高效率的Java学习心得 ...12.3.1 重温上节中的程序 349...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    基本信息 作者: 臧萌 出版社:清华大学出版社 ISBN:9787302217831 上架时间:2010-3-30 出版日期:2010 年3月 开本:16开 ... ...Java编程老鸟潜心写作,奉献高效率的Java学习心得 ...12.3.1 重温上节中的程序 349...

    JavaStuff:只是一个试图学习用Java编码的老人

    理解并发编程的概念和同步机制(如synchronized关键字,wait()和notify()方法)至关重要。 8. **接口与抽象类**:接口用于定义一组方法,而抽象类可以包含未实现的方法。两者都是实现多态的方式,但接口不支持字段...

Global site tag (gtag.js) - Google Analytics