`
bo_hai
  • 浏览: 554131 次
  • 性别: 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 多线程实例

    java多线程应用实例,包括wait、notify、notifyAll等的应用方法,经过调试,可以直接运行。

    Java制作生产者消费者问题实例

    自己写的一个生产者消费者问题的一个实例,特别注意了wait,notify和notifyAll的不同应用场景。

    java多线程设计模式详解(PDF及源码)

    wait set——线程的休息室 wait方法——把线程放入wait set notify方法——从wait set拿出线程 notifyAll方法——从wait set拿出所有线程 wait、notify、notifyAll是Object类的方法 线程的状态移转 跟线程有关的其他...

    Java测试题2答案

    DEF A notify() B wait() C notifyAll() D sleep() E.yield() F.synchronized(this) 7.构造BufferedInputStream的合适参数是哪个? AC A BufferedInputStream B BufferedOutputStream ...

    java 面试题 总结

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 14、Overload...

    mylty_thread_review

    no2_wait_notify wait-notify-notifyAll的实例 no3_thread_hangup 线程挂起的几种实现方式 no4_join join的实例 no5_thread_stop 停止线程的几种方法 no6_deadlock 模拟死锁 no7_threadlocal ThreadLocal...

    超级有影响力霸气的Java面试题大全文档

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 17、...

    关于JAVA面试的100题及其答案

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

    Java 2实用教程(第三版)实验指导与习题解答

    实验2 实例成员与类成员 12 实验3 使用package语句与import语句 13 上机实践4 继承与接口 15 实验1 继承 15 实验2 上转型对象 17 实验3 接口回调 18 上机实践5 字符串、时间与数字 19 实验1 String类的常用方法 19...

    JAVA程序设计教程

    Java程序.............................................................................................6 1.3.1 Java程序的结构 ...........................................................................

    LeetCode判断字符串是否循环-java:Java

    LeetCode判断字符串是否循环 知识点总结 java基础 1、使用迭代器和for each循环查看集合元素时只能获得元素的值,不能改变元素 ...object的方法:wait(notify,notifyall),thread的方法:(sleep、join),结束

    java多线程通信之等待唤醒机制

    典型实例有生产者和消费者,本文也通过实例来分析线程等待唤醒机制。  1、相关API介绍  public final void notify()  唤醒在此对象监视器上等待的单个线程,如果所有线程都在此对象上等待,则会任意选择唤醒...

    高级开发并发面试题和答案.pdf

    synchronized关键字加在静态方法和实例方法的区别; 用锁的注意点; cas机制可能导致的问题ABA,什么是ABA; 程序开多少线程合适; 实现一下DCL(双重检查锁) stream 和 parallelStream区别; 实现一个阻塞队列(用...

    javaSE代码实例

    16.4.9 防止错误的使用wait、notify、notifyAll方法 371 16.5 获取当前正在运行的线程 372 16.6 volatile关键字的含义与使用 372 16.7 小结 373 第17章 高级线程开发 374 17.1 线程池的使用 374 17.1.1...

    DemoUtils:一些帮助类

    16、Thread【实现方式、异步调用、join、synchronized、wait、notifyAll,死锁、同步互斥、通信、ThreadLocal、消费者与生产者模式】 17、POI 18、JVM简单实例【Heap溢出、Stack溢出】 19、Redis的简单实例 20、java...

    进销存系统文档作业例子

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 14、...

    jsp内置对象的用法

    page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例 序号 方 法 说 明 1 class getClass 返回此Object的类 2 int hashCode() 返回此Object的hash码 3 boolean equals...

    数据连接池

    notifyAll(); } /** * 从连接池获得一个可用连接.如没有空闲的连接且当前连接数小于最大连接 * 数限制,则创建新连接.如原来登记为可用的连接不再有效,则从向量删除之, * 然后递归调用自己以尝试新的可用连接....

Global site tag (gtag.js) - Google Analytics