两个线程,分别有两数据结构: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、notifyAll等的应用方法,经过调试,可以直接运行。
自己写的一个生产者消费者问题的一个实例,特别注意了wait,notify和notifyAll的不同应用场景。
wait set——线程的休息室 wait方法——把线程放入wait set notify方法——从wait set拿出线程 notifyAll方法——从wait set拿出所有线程 wait、notify、notifyAll是Object类的方法 线程的状态移转 跟线程有关的其他...
DEF A notify() B wait() C notifyAll() D sleep() E.yield() F.synchronized(this) 7.构造BufferedInputStream的合适参数是哪个? AC A BufferedInputStream B BufferedOutputStream ...
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 14、Overload...
no2_wait_notify wait-notify-notifyAll的实例 no3_thread_hangup 线程挂起的几种实现方式 no4_join join的实例 no5_thread_stop 停止线程的几种方法 no6_deadlock 模拟死锁 no7_threadlocal ThreadLocal...
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 17、...
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
实验2 实例成员与类成员 12 实验3 使用package语句与import语句 13 上机实践4 继承与接口 15 实验1 继承 15 实验2 上转型对象 17 实验3 接口回调 18 上机实践5 字符串、时间与数字 19 实验1 String类的常用方法 19...
Java程序.............................................................................................6 1.3.1 Java程序的结构 ...........................................................................
LeetCode判断字符串是否循环 知识点总结 java基础 1、使用迭代器和for each循环查看集合元素时只能获得元素的值,不能改变元素 ...object的方法:wait(notify,notifyall),thread的方法:(sleep、join),结束
典型实例有生产者和消费者,本文也通过实例来分析线程等待唤醒机制。 1、相关API介绍 public final void notify() 唤醒在此对象监视器上等待的单个线程,如果所有线程都在此对象上等待,则会任意选择唤醒...
synchronized关键字加在静态方法和实例方法的区别; 用锁的注意点; cas机制可能导致的问题ABA,什么是ABA; 程序开多少线程合适; 实现一下DCL(双重检查锁) stream 和 parallelStream区别; 实现一个阻塞队列(用...
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...
16、Thread【实现方式、异步调用、join、synchronized、wait、notifyAll,死锁、同步互斥、通信、ThreadLocal、消费者与生产者模式】 17、POI 18、JVM简单实例【Heap溢出、Stack溢出】 19、Redis的简单实例 20、java...
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 14、...
page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例 序号 方 法 说 明 1 class getClass 返回此Object的类 2 int hashCode() 返回此Object的hash码 3 boolean equals...
notifyAll(); } /** * 从连接池获得一个可用连接.如没有空闲的连接且当前连接数小于最大连接 * 数限制,则创建新连接.如原来登记为可用的连接不再有效,则从向量删除之, * 然后递归调用自己以尝试新的可用连接....