`
bo_hai
  • 浏览: 565837 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JAVA notifyAll wait 实例

 
阅读更多

两个线程,分别有两数据结构:1到10的数据和A到E的字符。要求打印出:12A34B56C78D910E 。程序如下:

 

public class NotifyAllTest {

	/** 期望的打印结果:12A34B56C78D910E ,怎么搞 ?
	 * @param args
	 */
	public static void main(String[] args) {
		int[] numArr = {1,2,3,4,5,6,7,8,9,10};
		char[] charArr = {'A','B','C','D','E'};
		NotifyAllTest obj = new NotifyAllTest();
		new Thread(new OneThread(numArr, obj)).start();
		new Thread(new TwoThread(charArr, obj)).start();
	}
}

class OneThread implements Runnable {

	private int[] numArr;

	private NotifyAllTest	notifyAllTest;
	
	public OneThread(int[] numArr,NotifyAllTest	notifyAllTest) {
		this.notifyAllTest = notifyAllTest;
		this.numArr = numArr;
	}
	
	@Override
	public void run() {
		synchronized (notifyAllTest) {
			for(int i = 0 ,len = numArr.length; i < len ; i++) {
				if(i%2==0){
					try {
						notifyAllTest.wait(200);
						notifyAllTest.notifyAll();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				} 
				System.out.print(numArr[i]);
			}
		}
	}
}

class TwoThread implements Runnable {
	
	private char[] charArr;

	private NotifyAllTest	notifyAllTest;

	public TwoThread(char[] charArr,NotifyAllTest	notifyAllTest) {
		this.charArr = charArr;
		this.notifyAllTest = notifyAllTest;
	}
	
	@Override
	public void run() {
		synchronized (notifyAllTest) {
			for(int i = 0 ,len = charArr.length; i < len ; i++) {
				if(i%1==0){
					try {
						notifyAllTest.wait(300);
						notifyAllTest.notifyAll();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				} 
				System.out.print(charArr[i]);
			}
		}
	}
}

 

分享到:
评论

相关推荐

    java之wait,notify的用法([ 详解+实例 ])

    wait方法是Object类的一个方法,用于让当前线程进入等待状态,直到其他线程调用notify或notifyAll方法来唤醒它。在wait方法中,当前线程会释放它所占有的锁,并进入等待状态。wait方法可以带有参数,指定等待的时间...

    Java基础编程实例

    9. **多线程**:Java提供Thread类和Runnable接口来实现多线程,学习如何同步和通信,如synchronized关键字、wait()、notify()和notifyAll()方法。 10. **反射机制**:通过反射,可以在运行时动态地获取类的信息并...

    java 多线程并发实例

    本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是程序执行的基本单元,每个线程都有自己的程序计数器、虚拟机栈、本地方法栈,而共享堆...

    JAVA学习实例15个

    6. **多线程**:Java内置对多线程的支持,实例可能会涉及Thread类、Runnable接口,以及同步机制(synchronized关键字,wait()、notify()和notifyAll()方法)。 7. **网络编程**:Socket编程是Java网络编程的一部分...

    JAVA多线程的实例

    当一个线程调用`wait()`后,它会释放持有的锁并进入等待状态,直到其他线程调用`notify()`或`notifyAll()`唤醒它。但要注意,这些方法必须在`synchronized`代码块或方法中使用,以避免并发问题。 Java并发包`java....

    Java经典源码实例

    7. **多线程**:学习如何创建和管理线程,理解线程同步和通信,如synchronized关键字、wait()、notify()和notifyAll()方法的应用。 8. **网络编程**:掌握Socket编程,创建TCP和UDP通信,实现简单的客户端和服务端...

    Java通过wait()和notifyAll()方法实现线程间通信

    本篇将详细介绍如何使用`wait()`和`notifyAll()`方法实现线程间的通信,并结合给定的代码实例进行分析。 1. **`wait()`方法**: 当一个线程调用对象的`wait()`方法时,该线程会释放当前对象的锁,并进入等待状态。...

    100个Java经典编程实例源代码

    实例可能涉及同步机制,如synchronized关键字、wait()、notify()和notifyAll()方法,以及Lock接口。 8. 网络编程:Java的Socket和ServerSocket类用于实现客户端-服务器通信,实例可能涵盖TCP和UDP协议的简单应用。 ...

    JAVA程序开发实例

    5. **多线程**:JAVA支持多线程编程,实例可能包含线程的创建(Thread类或Runnable接口),同步机制(synchronized关键字,wait(),notify(),notifyAll()方法)的应用。 6. **输入/输出流**:JAVA的IO流用于数据的...

    Java常用实例程序

    线程同步机制包括synchronized关键字、wait()、notify()和notifyAll()方法以及Lock接口。 8. **网络编程**:Java提供了Socket和ServerSocket类用于网络通信,能够实现客户端和服务器间的连接和数据交换。 9. **...

    java经典代码实例

    6. **多线程**:如何创建和管理线程,包括Thread类和Runnable接口,线程同步(synchronized关键字、wait()、notify()和notifyAll()方法)和线程池的使用。 7. **文件操作**:读写文件、创建目录、复制文件等,以及...

    java中几个notify、wait使用实例

    `wait()`、`notify()`和`notifyAll()`方法是Java中实现线程同步的关键工具。正确使用它们可以有效避免线程间的竞争条件和死锁问题,同时也能实现线程间的高效通信。在实际开发中,应根据具体的应用场景选择合适的...

    JAVA 实例代码_新手推荐看看

    同步机制包括 synchronized 关键字、wait()、notify() 和 notifyAll() 方法,以及 Lock 接口(如 ReentrantLock)等。此外,ExecutorService 和 Future 接口提供了更高级的线程池管理功能。 数据库类通常指的是Java...

    Java讲义与实例

    学习线程同步机制,如synchronized关键字、wait()、notify()和notifyAll()方法,以及Lock接口和Condition。 6. **反射**:Java反射机制允许程序在运行时动态获取类的信息并操作类的对象。它是许多高级功能,如插件...

    eclipse项目java线程实例

    wait()和notify()方法用于线程间的通信,一个线程可以通过wait()暂停执行,等待其他线程释放资源,而notify()或notifyAll()可以唤醒等待的线程。 此外,我们还可以利用Java的并发工具类,如ExecutorService和...

    java多线程编程实例_Source

    2. 线程通信:wait()、notify()和notifyAll()方法用于线程间的通信。在生产者消费者模型或其他同步问题中,这些方法起到关键作用。 3. 线程状态:线程有新建、就绪、运行、阻塞和终止五种状态。实例可能涉及线程的...

    java 编程实例

    9. **线程**:Java支持多线程编程,实例可能会包含Thread类和Runnable接口的使用,线程同步机制(如synchronized关键字、wait()、notify()和notifyAll()方法)以及线程池。 10. **IO和NIO**:Java的IO流系统和新...

    Java多线程实例程序

    Java提供了多种同步机制来解决这个问题,包括`synchronized`关键字、`wait()`, `notify()`和`notifyAll()`方法。在这个实例中,可能会使用`synchronized`关键字来确保控制台和窗口的同步输出,防止数据竞争。 4. **...

Global site tag (gtag.js) - Google Analytics