全屏

java.lang.Object.notifyAll()唤醒正在等待此对象的监视器上的所有线程。通过调用wait方法的对象的监视器上的一个线程等待。

该唤醒线程将不能继续进行,直到当前线程放弃此对象的锁。被唤醒的线程将完全可能积极在此对象上进行同步的任何其他线程通常的方式相争; 例如,唤醒线程分享下一个线程锁定的对象没有可靠的特权或劣势。

这个方法只能由一个线程是此对象监视器的所有者被调用。

声明

以下是java.lang.Object.notifyAll()方法的声明public final void notifyAll()

参数NA

返回值

这个方法没有返回值。

异常IllegalMonitorStateException --如果当前线程不是此对象监视器的拥有者。

例子

对于Class类型的对象,通过执行该类的同步静态方法。package cn.sxt;

import java.util.Collections;

import java.util.LinkedList;

import java.util.List;

public class ObjectDemo extends Object {

private List synchedList;

public ObjectDemo() {

// create a new synchronized list to be used

synchedList = Collections.synchronizedList(new LinkedList());

}

// method used to remove an element from the list

public String removeElement() throws InterruptedException {

synchronized (synchedList) {

// while the list is empty, wait

while (synchedList.isEmpty()) {

System.out.println("List is empty...");

synchedList.wait();

System.out.println("Waiting...");

}

String element = (String) synchedList.remove(0);

return element;

}

}

// method to add an element in the list

public void addElement(String element) {

System.out.println("Opening...");

synchronized (synchedList) {

// add an element and notify all that an element exists

synchedList.add(element);

System.out.println("New Element:'" + element + "'");

synchedList.notifyAll();

System.out.println("notifyAll called!");

}

System.out.println("Closing...");

}

public static void main(String[] args) {

final ObjectDemo demo = new ObjectDemo();

Runnable runA = new Runnable() {

public void run() {

try {

String item = demo.removeElement();

System.out.println("" + item);

} catch (InterruptedException ix) {

System.out.println("Interrupted Exception!");

} catch (Exception x) {

System.out.println("Exception thrown.");

}

}

};

Runnable runB = new Runnable() {

// run adds an element in the list and starts the loop

public void run() {

demo.addElement("Hello!");

}

};

try {

Thread threadA1 = new Thread(runA, "A");

threadA1.start();

Thread.sleep(500);

Thread threadA2 = new Thread(runA, "B");

threadA2.start();

Thread.sleep(500);

Thread threadB = new Thread(runB, "C");

threadB.start();

Thread.sleep(1000);

threadA1.interrupt();

threadA2.interrupt();

} catch (InterruptedException x) {

}

}

}

让我们来编译和运行上面的程序,这将产生以下结果:List is empty...

List is empty...

Opening...

New Element:'Hello!'

notifyAll called!

Closing...

Waiting...

Hello!

Waiting...

List is empty...

Interrupted Exception!

分享到:

0评论

java 集合notifyall,java.lang.Object.notifyAll()方法实例相关推荐

  1. java boolean例子_java.lang.Boolean.booleanValue()方法实例

    全屏 java.lang.Boolean.booleanValue()返回该Boolean对象作为一个布尔原始值. 声明 以下是java.lang.Boolean.booleanValue()方法的声 ...

  2. java集合系列——java集合概述(一)

    在JDK中集合是很重要的,学习java那么一定要好好的去了解一下集合的源码以及一些集合实现的思想! 一:集合的UML类图(网上下载的图片) Java集合工具包位置是java.util.* 二:集合工具 ...

  3. 【Java集合】Java集合一览(汇总)

    [Java集合]Java集合一览(汇总) Java Collection Framework中常用类学习 Map HashMap工作原理与实现 LinkedHashMap TreeMap Collec ...

  4. java 获取用户的MAC地址多种方法实例详解

    java 获取用户的MAC地址多种方法实例详解 这篇文章主要介绍了JAVA实现获取用户的MAC地址的多种方法实例,需要的朋友可以参考下 java实现获取用户的MAC地址方法: 方法一:将本机地址与局域 ...

  5. java.lang.IllegalArgumentException: not found @HttpResponse from class java.lang.Object解决方法

    在使用xUtils3联网请求的时候出现 java.lang.IllegalArgumentException:not found @HttpResponse from class java.lang. ...

  6. Java集合(2)--Collection接口方法

    1.添加 add(Object obj) addAll(Collection coll) 2.获取有效元素的个数 int size() 在这里插入代码片 3.清空集合 void clear() 4.是 ...

  7. Java集合框架概述及Collection接口方法讲解

    Java集合框架概述 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储.另一方面,使用Array存储对象方面具有一些弊 端,而Java 集合就像一种容 ...

  8. java byte short_java.lang.Short.byteValue()方法实例

    java.lang.Short.byteValue()方法返回这个Short为一个字节的值. 声明 以下是java.lang.Short.byteValue()方法的声明 public byte by ...

  9. java replace stringbuilder_java.lang.StringBuilder.replace()方法实例

    全屏 java.lang.StringBuilder.replace()方法按照这个顺序,在指定的字符串的子字符串替换字符.子串开始在指定start的 索引,并延伸到该字符 end - 1,或如果序列 ...

最新文章

  1. ABAP性能实例七例
  2. TextView 的ScrollView滚动效果
  3. FD_CLOEXEC用法及原因_转
  4. Java剖析工具JProfiler入门使用教程:离线剖析和触发器
  5. 【python】再说装饰器与闭包的写法
  6. javascript之ua与urlSchema
  7. vue --- v-html、v-bind
  8. Python与操作系统有关的模块
  9. 手机知识:手机充电必备的几个小技巧,赶快看一下吧!
  10. java jsonp 接口_jsonp使用,spring4.x对jsonp的支持
  11. 第8章 java中的并发工具类
  12. 移动端开发 自适应rem js文件
  13. uc for linux,在uClinux文件系统中增加应用程序
  14. 如何写出让人眼前一亮的硬核简历
  15. 诚招基于B/S系统开发的.net程序员[上海徐汇区]
  16. 双线性插值GPU加速
  17. Ubuntu卸载WPS安装Libreoffice
  18. Photoshop插件-删除所有亮度通道蒙板-脚本开发-PS插件
  19. 可能是史上最全的权限系统设计
  20. [IOS APP]婷婷诗教-有声系列

热门文章

  1. 最新版的phpcmsV9安装报错解决
  2. ES6中padStart()和padEnd()方法的使用
  3. 为什么我用LaTeX排版的那个双引号编译出来很奇怪,如下图,怎么做才能出现对的?
  4. 被质检总局禁用6年的“万能插座”,你家可能正在用
  5. 实时刷新的在线聊天室
  6. 8个优秀图片素材网站,免费/商用/高分辨率。
  7. netcore 上传文件
  8. java冒泡排序详解!!!带图
  9. Binder机制之AIDL
  10. android AudioTrack