Thread类的notifyAll()方法用于唤醒所有线程。此方法向特定对象的所有等待线程发出通知。

如果使用notifyAll()方法并且多个线程正在等待通知,那么所有线程都会收到通知,但线程的执行将逐个执行,因为线程需要锁定,并且只有一个锁可用于一个对象。

语法

public final void notifyAll()

返回

此方法不返回任何值。

异常

IllegalMonitorStateException :如果当前线程不是对象监视器的所有者,则抛出此异常。

示例

class Notify1 extends Thread

{

public void run()

{

synchronized(this)

{

System.out.println("Starting of " + Thread.currentThread().getName());

try {

this.wait();

}

catch (InterruptedException e) {

e.printStackTrace();}

System.out.println(Thread.currentThread().getName() + "...notified");

}

}

}

class Notify2 extends Thread {

Notify1 notify1;

Notify2(Notify1 notify1)

{

this.notify1 = notify1;

}

public void run()

{

synchronized(this.notify1)

{

System.out.println("Starting of " + Thread.currentThread().getName());

try {

this.notify1.wait();

}

catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println(Thread.currentThread().getName() + "...notified");

}

}

}

class Notify3 extends Thread

{

Notify1 notify1;

Notify3(Notify1 notify1)

{

this.notify1 = notify1;

}

public void run()

{

synchronized(this.notify1)

{

System.out.println("Starting of " + Thread.currentThread().getName());

// call the notifyAll() method

this.notify1.notifyAll();

System.out.println(Thread.currentThread().getName() + "...notified");

}

}

}

public class JavaNotifyAllExp

{

public static void main(String[] args) throws InterruptedException

{

Notify1 notify1 = new Notify1();

Notify2 notify2 = new Notify2(notify1);

Notify3 notify3 = new Notify3(notify1);

// creating the threads

Thread t1 = new Thread(notify1, "Thread-1");

Thread t2 = new Thread(notify2, "Thread-2");

Thread t3 = new Thread(notify3, "Thread-3");

// call run() method

t1.start();

t2.start();

Thread.sleep(100);

t3.start();

}

}

执行上面示例代码,得到以下结果:

Starting of Thread-1

Starting of Thread-2

Starting of Thread-3

Thread-3...notified

Thread-2...notified

Thread-1...notified

¥ 我要打赏

纠错/补充

收藏

下一篇:哥,这回真没有了

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

java notifyall_Java Thread notifyAll()方法相关推荐

  1. java 集合notifyall,java.lang.Object.notifyAll()方法实例

    全屏 java.lang.Object.notifyAll()唤醒正在等待此对象的监视器上的所有线程.通过调用wait方法的对象的监视器上的一个线程等待. 该唤醒线程将不能继续进行,直到当前线程放弃此 ...

  2. java threadgourp_Java Thread getThreadGroup()方法

    Java Thread getThreadGroup()方法 java.lang.Thread.getThreadGroup() 方法返回此线程所属的线程组.它返回null,如果该线程已经死亡(停止) ...

  3. Java多线程中notifyAll()方法使用教程

    简介 本文将承接<Java多线程wait()和notify()系列方法使用教程>,结合代码实例,补充讲解下notifyAll()方法的作用以及使用时需要注意的地方. 一.notifyAll ...

  4. java setdaemon_Java Thread setDaemon()方法

    Thread类的setDaemon()方法用于将线程标记为守护程序线程或用户线程. 它的生命依赖于用户线程,即当所有用户线程都消亡时,JVM会自动终止该线程.必须在线程启动之前调用它. 如果在声明线程 ...

  5. java suspend_Java Thread suspend()方法

    Thread类的suspend()方法使线程无法运行到等待状态.如果要停止线程执行并在发生特定事件时再次启动,则使用此方法. 此方法允许线程暂时停止执行. 可以使用resume()方法恢复挂起的线程. ...

  6. java thread yield()_Java Thread yield()方法

    Java Thread yield()方法 java.lang.Thread.yield() 方法使当前执行的线程对象来暂停并允许其他线程执行. 1 语法 public static void yie ...

  7. java thread.notify,Java Thread notify()方法

    Java Thread notify()方法 java.lang.Thread.notify() 方法用于唤醒单个线程.此方法仅针对正在等待特定对象的一个线程给出通知.如果我们使用notify() 方 ...

  8. java 线程 Thread 使用介绍,包含wait(),notifyAll() 等函数使用介绍

    (原创,转载请说明出处!谢谢--http://www.cnblogs.com/linguanh/) 此文目的为了帮助大家较全面.通俗地了解线程 Thread 相关基础知识! 目录: --线程的创建: ...

  9. 为什么wait、notify、notifyAll方法定义在Object中而不是Thread类中

    多线程概述 Java是一个支持多线程的开发语言,多线程并发执行任务可以充分利用CPU资源,提高多任务并发执行效率(注意区分:多线程并不会加快任务的执行速度,而是可以充分利用多核CPU让线程轮流进行工作 ...

最新文章

  1. 获取轮廓、获取内接矩形
  2. 干货丨揭秘深度学习的核心:掌握训练数据的方法
  3. HTML页面显示缩略所有空格为一格的方法
  4. linux视频教程之vsftp_B
  5. vue 传参 微信_vue-router 你可能忽略的知识点
  6. 日常踩坑:python的dlib库安装不成功,版本对应问题
  7. php 获取 年月日时分秒_JS获取年月日时分秒的方法分析
  8. Vue项目中使用浏览器同步测试工具 browersync
  9. 《C#图解教程》读书笔记之五:委托和事件
  10. 安装nvidia-docker
  11. 计算机不用鼠标怎么移动,如何在不使用鼠标的情况下拖动文件
  12. react + better-scroll 横向滚动案例
  13. Hard Life UVA - 1389(最大密度子图 输出点集)
  14. 复旦961-软件工程笔记
  15. 阿里云——云数据库RDS
  16. 在Centos系统下创建与Windows的共享文件夹
  17. 高新技术企业的重要性
  18. 肯耐珂萨荣登36氪WISE 2020企服金榜
  19. 【微软chatGPT版bing上线了,使用体验如何,符合你的需求吗?】
  20. NGC朱威宇:不管牛市熊市,都需要定力和坚持原则

热门文章

  1. 学习总结4.4 Linux文件/目录所属组修改
  2. Tensorflow 自己的手写数字实践与数据集制作
  3. 在vscode中调用dosbox来运行tasm汇编程序(tasks.json code runner)
  4. 风控实战:生物探针技术
  5. 汇编之寄存器(内存访问)之字与字节的传送
  6. MOS管 电源防反接
  7. Spring中的定时任务fixedRate和fixedDelay和cron的区别
  8. 新手学Python之学习官网教程(十三: What Now)
  9. ruby|调用外部nodejs并处理返回结果
  10. GET http://localhost:8080/***.png net::ERR_BLOCKED_BY_CLIENT 无法加载图片