http://wenwen.soso.com/z/q129287952.htm
看一个生产者-消费者问题 class Test { public static void main(String[] args) { Queue q=new Queue(); Producer p=new Producer(q); Consumer c=new Consumer(q); p.start(); c.start(); } } class Producer extends Thread { Queue q; Producer(Queue q) { this.q=q; } public void run() { for(int i=0;i<10;i++) { q.put(i); System.out.println("Producer put "+i); } } } class Consumer extends Thread { Queue q; Consumer(Queue q) { this.q=q; } public void run() { while(true) { System.out.println("Consumer get "+q.get()); } } } class Queue { int value; boolean bFull=false; public synchronized void put(int i) { if(!bFull) { value=i; bFull=true; notify(); } try { wait(); } catch(Exception e) { e.printStackTrace(); } } public synchronized int get() { if(!bFull) { try { wait(); } catch(Exception e) { e.printStackTrace(); } } bFull=false; notify(); return value; } }
在上述例子中Queue类中的get(int i)和put()方法都是synchronized 修饰的,也就是说在听同一时间只能有一个线程调用 。
main()方法中的p.start();c.start();自动调用Producer 和Consumer 中的run()方法; 当其中一个线程调用wait()时,此线程等待。另外的线程运行,当运行的线程调用notify()时,是处于等待的线程处于准备状态,当cpu分配给资源后,就可以随时运行。
相关推荐
在Java多线程编程中,wait和notify是两个非常重要的方法,它们都是Object类的方法,用于线程之间的通信和同步。下面我们将详细解释wait和notify的用法。 wait方法 wait方法是Object类的一个方法,用于让当前线程...
在Java中,`wait()`, `notify()`, 和 `notifyAll()` 是Java Object类的三个方法,它们在实现线程间通信和协作时扮演着关键角色。这些方法主要用于解决线程等待和唤醒的问题,是基于Java Monitor(监视器)模型的。 ...
Object类中的wait和notify方法是Java多线程编程中最重要的同步机制之一,它们是Java.lang.Object类中的两个方法,用于在多线程之间进行通信和同步。wait方法将当前线程置于等待状态,而notify方法则用于唤醒等待的...
在提供的压缩包文件`java_sychronization`中,可能包含了一些示例代码,用于演示如何在Java中使用`synchronized`关键字以及`wait()`和`notify()`方法。通过研究这些样例,你可以更深入地了解这些工具的用法和效果。...
在Java并发编程中,Object的wait()、notify()和notifyAll()方法是非常重要的概念,这三个方法都是Object类的方法,可以认为任意一个Object都是一种资源(或者资源的一个代表)。在并发编程中,线程安全是非常重要的...
在Java中,`wait()` 和 `notify()` 方法是实现线程间通信和协作的重要工具,它们属于 `java.lang.Object` 类,这意味着所有类都默认继承了这两个方法。本文将详细探讨如何使用 `wait()` 和 `notify()` 来控制子线程...
这两个方法定义在`Object`类中,因此所有Java对象都可以作为锁来使用。在深入探讨之前,我们先了解下`wait()`、`notify()`以及`notifyAll()`的基本概念。 ### `wait()` 方法 当一个线程执行到`wait()`方法时,它会...
`wait()`、`notify()`和`notifyAll()`是Java中的三个关键字,它们属于Object类的方法,主要用于线程间的通信,尤其在实现生产者消费者模式时发挥着重要作用。本文将深入探讨这些方法以及如何在实际场景中应用它们。 ...
Java中多线程编程中,wait、notify、notifyAll三个方法是非常重要的,它们都是Object对象的方法,用于线程之间的通信。下面我们将详细介绍这三个方法的使用和作用。 一、wait()方法 wait()方法是使当前线程自动...
这个压缩包文件"详解Java中Object 类的使用.rar"包含了对Java中Object类的深入探讨,通过阅读其中的"详解Java中Object 类的使用.txt"文本,我们可以了解到关于Object类的一些关键知识点。 1. **对象的创建与类型...
了解并正确使用`Object`类的方法对于编写健壮、高效的Java程序至关重要。在设计和实现类时,根据需要重写`equals()`、`hashCode()`和`toString()`方法,以满足特定的业务需求。同时,理解线程同步方法`wait()`、`...
- 在`run`方法中使用`synchronized(this)`确保对`this`对象的操作是同步的。 - 计算累加总和并在每次累加后输出当前总和。 - 调用`notify()`方法唤醒正在等待的线程。 #### `synchronized`关键字 `Synchronized...
在Java编程语言中,`wait()`和`notify()`是Object类中的两个关键方法,它们用于线程间的协作和通信。这两个方法在多线程环境下尤其重要,因为它们允许线程等待特定条件并通知其他线程继续执行。在分析给定的程序之前...
- **权限和锁**:`wait()`, `notify()`和`notifyAll()`需要在同步上下文中使用,而`sleep()`则不需要。 - **资源释放**:`wait()`会释放对象锁,而`sleep()`不会。 - **唤醒机制**:`wait()`需要其他线程调用`notify...
在Java中,`wait()`, `notify()`, `notifyAll()`方法是`Object`类的成员,而不是`Thread`类的,这意味着任何对象都可以作为等待和通知的基础。 **1. 状态变量(State Variable)** 状态变量是线程间通信的关键。当...
在Java中,Object类还提供了其他一些方法,例如wait、notify、notifyAll等方法。这些方法都是线程相关的,用于线程之间的通信和同步。 在实际编程中,我们经常需要重写Object类中的方法,例如equals和hashCode方法...
Java多线程通讯之wait、notify的区别详解 ...wait、notify和notifyAll方法是Java多线程通讯中非常重要的方法,它们用于控制线程的状态和同步。在多线程编程中,使用这些方法可以保证线程的安全性和高效性。
这两个方法是Java语言中的Object类提供的,因此所有的对象都可以使用。在本文中,我们将深入探讨如何使用主线程来控制子线程的`wait()`和`notify()`操作,以及它们在并发编程中的作用。 首先,`wait()`方法会导致...
Java中的`Object`类提供了`wait()`方法,这是Java多线程编程中一个至关重要的功能,它与`notify()`和`notifyAll()`一起用于线程间的协作。`wait()`方法主要用于实现线程的等待和唤醒机制,允许线程在特定条件下暂停...
这些方法在Java的Object类中定义,主要用于线程间的通信和协作,确保资源的安全访问。下面将详细阐述这些概念以及相关的线程同步策略。 1. **wait()**: 当线程调用对象的wait()方法时,它会释放当前持有的锁,并...