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. SNMP协议5种报文
  2. IIS6.0限制上传文件大小的解决办法
  3. 计算机的收获初一作文,初一关于收获的作文
  4. Watch out for these 10 common pitfalls of experienced Java developers architects--转
  5. vue的diff 算法
  6. jdk 9和jdk8_JDK 9是某些功能的终结
  7. Linux下Reids的安装和使用
  8. SpringCloud工作笔记087---SpringBoot启动报错:IDEA 错误: 找不到或无法加载主类 解决方法_connected to the target VM, address:
  9. 分期手续费转换为年化利率
  10. GD32F103使用串口DMA收+发 信息(无中断)
  11. Odin - Inspector and Serializer 学习笔记总结
  12. 加速器在模拟器中的尝试
  13. python正态分布函数_使用Python实现正态分布、正态分布采样
  14. 使用excel、python、tableau对招聘数据进行数据处理及可视化分析
  15. [USACO] Team Tic Tac Toe
  16. 2022.11.24
  17. matlab频率域滤波器,频率域滤波的MATLAB设计与实现_课程设计
  18. ios 系统状态栏样式修改_iOS_状态栏字体颜色修改(完美解决)
  19. 集合相关题目0927
  20. 【数据库系统工程师】6.4数据仓库和数据挖掘基础知识

热门文章

  1. html转换成chm
  2. JAVA方法加载顺序
  3. 计算机考研有哪些值得推荐的院校?
  4. glRotatef个人理解
  5. android21是什么意思,带你深度了解AppCompatActivity和Toolbar(Android21 )
  6. Xcode清理缓存-2021年07月更新
  7. 硕士论文中期汇报ppt_华北理工大学附属唐山市人民医院硕士学位论文开题、中期答辩会圆满结束...
  8. MRI影像学习笔记(三)
  9. NOJ-1142-踩气球
  10. 没有广告的视频一站式服务很适合放企业网站宣传片