两个线程,分别有两数据结构: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]); } } } }
相关推荐
wait方法是Object类的一个方法,用于让当前线程进入等待状态,直到其他线程调用notify或notifyAll方法来唤醒它。在wait方法中,当前线程会释放它所占有的锁,并进入等待状态。wait方法可以带有参数,指定等待的时间...
9. **多线程**:Java提供Thread类和Runnable接口来实现多线程,学习如何同步和通信,如synchronized关键字、wait()、notify()和notifyAll()方法。 10. **反射机制**:通过反射,可以在运行时动态地获取类的信息并...
本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是程序执行的基本单元,每个线程都有自己的程序计数器、虚拟机栈、本地方法栈,而共享堆...
6. **多线程**:Java内置对多线程的支持,实例可能会涉及Thread类、Runnable接口,以及同步机制(synchronized关键字,wait()、notify()和notifyAll()方法)。 7. **网络编程**:Socket编程是Java网络编程的一部分...
当一个线程调用`wait()`后,它会释放持有的锁并进入等待状态,直到其他线程调用`notify()`或`notifyAll()`唤醒它。但要注意,这些方法必须在`synchronized`代码块或方法中使用,以避免并发问题。 Java并发包`java....
7. **多线程**:学习如何创建和管理线程,理解线程同步和通信,如synchronized关键字、wait()、notify()和notifyAll()方法的应用。 8. **网络编程**:掌握Socket编程,创建TCP和UDP通信,实现简单的客户端和服务端...
本篇将详细介绍如何使用`wait()`和`notifyAll()`方法实现线程间的通信,并结合给定的代码实例进行分析。 1. **`wait()`方法**: 当一个线程调用对象的`wait()`方法时,该线程会释放当前对象的锁,并进入等待状态。...
实例可能涉及同步机制,如synchronized关键字、wait()、notify()和notifyAll()方法,以及Lock接口。 8. 网络编程:Java的Socket和ServerSocket类用于实现客户端-服务器通信,实例可能涵盖TCP和UDP协议的简单应用。 ...
5. **多线程**:JAVA支持多线程编程,实例可能包含线程的创建(Thread类或Runnable接口),同步机制(synchronized关键字,wait(),notify(),notifyAll()方法)的应用。 6. **输入/输出流**:JAVA的IO流用于数据的...
线程同步机制包括synchronized关键字、wait()、notify()和notifyAll()方法以及Lock接口。 8. **网络编程**:Java提供了Socket和ServerSocket类用于网络通信,能够实现客户端和服务器间的连接和数据交换。 9. **...
6. **多线程**:如何创建和管理线程,包括Thread类和Runnable接口,线程同步(synchronized关键字、wait()、notify()和notifyAll()方法)和线程池的使用。 7. **文件操作**:读写文件、创建目录、复制文件等,以及...
`wait()`、`notify()`和`notifyAll()`方法是Java中实现线程同步的关键工具。正确使用它们可以有效避免线程间的竞争条件和死锁问题,同时也能实现线程间的高效通信。在实际开发中,应根据具体的应用场景选择合适的...
同步机制包括 synchronized 关键字、wait()、notify() 和 notifyAll() 方法,以及 Lock 接口(如 ReentrantLock)等。此外,ExecutorService 和 Future 接口提供了更高级的线程池管理功能。 数据库类通常指的是Java...
学习线程同步机制,如synchronized关键字、wait()、notify()和notifyAll()方法,以及Lock接口和Condition。 6. **反射**:Java反射机制允许程序在运行时动态获取类的信息并操作类的对象。它是许多高级功能,如插件...
wait()和notify()方法用于线程间的通信,一个线程可以通过wait()暂停执行,等待其他线程释放资源,而notify()或notifyAll()可以唤醒等待的线程。 此外,我们还可以利用Java的并发工具类,如ExecutorService和...
2. 线程通信:wait()、notify()和notifyAll()方法用于线程间的通信。在生产者消费者模型或其他同步问题中,这些方法起到关键作用。 3. 线程状态:线程有新建、就绪、运行、阻塞和终止五种状态。实例可能涉及线程的...
9. **线程**:Java支持多线程编程,实例可能会包含Thread类和Runnable接口的使用,线程同步机制(如synchronized关键字、wait()、notify()和notifyAll()方法)以及线程池。 10. **IO和NIO**:Java的IO流系统和新...
Java提供了多种同步机制来解决这个问题,包括`synchronized`关键字、`wait()`, `notify()`和`notifyAll()`方法。在这个实例中,可能会使用`synchronized`关键字来确保控制台和窗口的同步输出,防止数据竞争。 4. **...