- 浏览: 193793 次
文章分类
最新评论
wait 和 notify 是Object类而非Thread类的两个方法,只有在线程同步的时候才有效,只出现在synchronize方法或块中。
wait(0) 无限等待
notify()
import java.util.*; public class JwaitTest { static List<String> pic = new ArrayList<String>(); static boolean done = false; static class Download extends Thread{ private String[] image = {"kobe.jpg","tmac.jpg"}; @Override public void run() { for(int i=0;i<image.length;i++){ int time = new Random().nextInt(100)*10; System.out.println("下载图片:"+time); try { Thread.sleep(time); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } synchronized(pic){ System.out.println("Download" + image[i]); pic.add(image[i]); pic.notify(); } } done = true; System.out.println("Download thread exit!"); } } static class Display extends Thread{ @Override public void run() { while(!done){ synchronized(pic){ try { pic.wait(200); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(pic.size()>0){ System.out.println("Display\t"+pic.remove(0)); } } } System.out.println("Display thread exit!"); } } /** * @param args */ public static void main(String[] args) { new Download().start(); new Display().start(); } } public class JwaitTest { static List<String> pic = new ArrayList<String>(); static boolean done = false; static class Download extends Thread{ private String[] image = {"kobe.jpg","tmac.jpg"}; @Override public void run() { for(int i=0;i<image.length;i++){ int time = new Random().nextInt(100)*10; System.out.println("下载图片:"+time); try { Thread.sleep(time); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } synchronized(pic){ System.out.println("Download" + image[i]); pic.add(image[i]); pic.notify(); } } done = true; System.out.println("Download thread exit!"); } } static class Display extends Thread{ @Override public void run() { while(!done){ synchronized(pic){ try { pic.wait(200); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(pic.size()>0){ System.out.println("Display\t"+pic.remove(0)); } } } System.out.println("Display thread exit!"); } } /** * @param args */ public static void main(String[] args) { new Download().start(); new Display().start(); } }
多个线程挑选一个
notifyAll()
发表评论
-
JDK配置
2012-09-19 14:13 688JAVA_HOME C:\Program Files\ ... -
Java abstract class interface 区别
2012-09-09 23:35 9851.abstract class 表示的是一种继承关系,并 ... -
全组合
2012-08-28 23:10 877package cn.xmu.microsoft; ... -
全排列
2012-08-28 11:35 837private static String[] perm ... -
Java 方法引用
2012-08-12 11:23 773一个对象的引用本质上是一个很强的完整和安全方面约束能力的对象指 ... -
Java 动态绑定 静态绑定
2012-08-12 11:07 811静态绑定:使用编译类型的对象引用 动态绑定:使用运行类型所指 ... -
A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available
2012-05-26 15:34 951Eclipse 在 Unbutu下双击图标启动会出现上述问题, ... -
Java BitSet
2012-04-13 09:29 925//说明 bs 至少能够装下65bits 大小由系统 ... -
Java 中文编码问题
2012-04-10 22:09 774import java.io.UnsupportedEn ... -
Hadoop in-mapper combining 实例
2012-04-08 14:46 2595import java.io.IOException; ... -
Java 正则表达式
2012-04-08 09:50 867Pattern p = Pattern.compile( ... -
Java 加载属性配置文件
2012-04-07 16:49 675import java.util.MissingReso ... -
Dangling meta character '*' near index 0
2012-04-05 14:12 1218这个由于是在java中使用split(“”);造成的,在 ... -
Logger
2012-04-05 08:54 784/LogTest/src/log4j.properties ... -
分割字符串时存在多个分隔符
2012-03-20 17:14 905public static void main(Str ... -
Error: could not open `C:Program FilesJavajre6libamd64jvm.cfg'
2012-02-26 18:55 1075重新配置环境变量后出现可以编译,不可以运行... 删除 ... -
JAVA 运行包中的类
2012-02-23 13:41 1080Java中的包是以目录的形式组织的,在java文件中如果指定了 ... -
Data Access Object
2012-02-18 21:24 755DAO:Data Access Object 把项目开发分为 ... -
文件读写问题
2012-02-16 13:36 743'赵','1234' '钱','2345''孙','3456 ... -
JUnit hamcrest匹配器
2012-02-16 12:04 941Hamcrest带有一个有用的匹配器库.以下是一些最重要的. ...
相关推荐
wait()、notify()和notifyAll()方法2---马克-to-win java视频
Java之wait和notify的用法详解 在Java多线程编程中,wait和notify是两个非常重要的方法,它们都是Object类的方法,用于线程之间的通信和同步。下面我们将详细解释wait和notify的用法。 wait方法 wait方法是Object...
_java多线程wait、notify机制详解_ 在Java多线程编程中,wait和notify是两个非常重要的机制,用于实现线程之间的通信和同步。在本文中,我们将通过示例代码详细介绍Java多线程wait和notify的使用,帮助读者更好地...
在Java中,`wait()`, `notify()`, 和 `notifyAll()` 是Java Object类的三个方法,它们在实现线程间通信和协作时扮演着关键角色。这些方法主要用于解决线程等待和唤醒的问题,是基于Java Monitor(监视器)模型的。 ...
在Java中,`wait()` 和 `notify()` 方法是实现线程间通信和协作的重要工具,它们属于 `java.lang.Object` 类,这意味着所有类都默认继承了这两个方法。本文将详细探讨如何使用 `wait()` 和 `notify()` 来控制子线程...
`wait()`、`notify()`和`notifyAll()`是Java中的三个关键字,它们属于Object类的方法,主要用于线程间的通信,尤其在实现生产者消费者模式时发挥着重要作用。本文将深入探讨这些方法以及如何在实际场景中应用它们。 ...
`synchronized`关键字、`wait()`和`notify()`方法是Java多线程中用于控制并发访问共享资源的重要工具,它们是Java内存模型(JMM)的一部分,主要用于解决线程间的同步问题。 一、`synchronized`关键字 `...
标题和描述概述的知识点主要集中在Java的多线程机制中,特别是`wait`和`notify`方法在同步锁中的应用。这些方法对于控制线程之间的交互至关重要,尤其是在资源有限或需要确保数据一致性的情况下。 ### Java同步锁...
源码—Java多线程5—死锁和wait notify notifyAll
在Java的多线程编程中,`notify()`与`wait()`是实现线程间通信的重要方法,它们主要用于解决生产者消费者问题、读者写者问题等典型同步问题。这两个方法定义在`Object`类中,因此所有Java对象都可以作为锁来使用。在...
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
本文旨在解析一个具体的Java多线程示例代码,以帮助读者更好地理解`wait()`与`notify()`方法的作用及其实现机制。这两个方法是Java中实现线程间通信的重要手段之一,尤其在解决生产者消费者模型、读者写者问题等经典...
在Java编程语言中,`wait()`和`notify()`是Object类中的两个关键方法,它们用于线程间的协作和通信。这两个方法在多线程环境下尤其重要,因为它们允许线程等待特定条件并通知其他线程继续执行。在分析给定的程序之前...
JAVAWAIT和NOTIFY的用法.pdf
Java多线程中wait、notify、notifyAll使用详解 Java中多线程编程中,wait、notify、notifyAll三个方法是非常重要的,它们都是Object对象的方法,用于线程之间的通信。下面我们将详细介绍这三个方法的使用和作用。 ...
Java程序并发的Wait-Notify机制是Java多线程编程中的一种重要同步工具,它允许线程之间通过共享对象进行通信和协作。这个机制基于Java的内置锁(也称为监视器锁),通常与`synchronized`关键字一起使用。在Java中,`...
在 Java 中可以用 wait、notify 和 notifyAll 来实现线程间的通信。。举个例子,如果你的Java程序中有两个线程——即生产者和消费者,那么生产者可以通知消费者,让消费者开始消耗数据,因为队列缓冲区中有内容待...
本文将深入探讨`wait()`, `notify()`以及它们与`sleep()`方法的区别,这些都是Java中与线程同步密切相关的概念。 首先,`wait()`, `notify()`和`notifyAll()`是Object类中的方法,它们主要用于线程间通信和协作。...
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
Java中的`wait()`, `notify()`, 和 `notifyAll()` 是多线程编程中的关键工具,它们用于在并发环境中协调线程间的交互。这些方法都定义在`java.lang.Object`类中,因为它们与对象的监视器(monitor)概念密切相关。...