每一个对象除了有一个锁之外,还有一个等待队列(wait set),当一个对象刚创建的时候,它的对待队列是空的。
我们应该在当前线程锁住对象的锁后,去调用该对象的wait方法。
当调用对象的notify方法时,将从该对象的等待队列中删除一个任意选择的线程,这个线程将再次成为可运行的线程。
当调用对象的notifyAll方法时,将从该对象的等待队列中删除所有等待的线程,这些线程将成为可运行的线程。
wait和notify主要用于producer-consumer这种关系中。
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;
}
}
分享到:
相关推荐
**Qt入门练习项目——生产者消费者模型** 在编程领域,生产者消费者模型是一种常见的多线程同步问题的解决方案。这个模型通常用于处理数据流的异步处理,其中一个或多个线程(生产者)生成数据,而其他线程(消费者...
生产者消费者模型是一种多线程同步的经典设计模式,它源于操作系统中的进程通信概念,用于解决资源的高效利用和协同工作问题。在这个模型中,生产者线程负责生成数据,而消费者线程则负责消费这些数据。为了确保生产...
生产者消费者模型是一种经典的线程同步问题,它模拟了实际生活中的生产过程和消费过程,使得生产者线程可以将数据生产出来,而消费者线程则负责消耗这些数据,两者之间通过共享数据结构进行协同工作。 生产者消费者...
Java生产者消费者模型是多线程编程中一种经典的并发控制模型,它源于操作系统中的哲学思想,用于解决资源的共享和异步处理问题。在该模型中,"生产者"线程负责生成数据,而"消费者"线程则负责消费这些数据。两者之间...
基于Linux C++的条件变量实现的生产者消费者模型,旨在进一步帮助读者理解条件变量的使用。
在这种场景下,生产者消费者模型是一个经典的多线程设计模式,它用于协调两个或多个线程之间的数据流。在给定的“wpf窗体多线程实现生产者消费者模型”中,我们将探讨如何利用C#的线程和信号量来实现这一模式,以及...
### Linux下的生产者消费者模型算法 #### 概述 在Linux环境下实现的生产者消费者模型是一种经典的多进程或线程间通信的例子。该模型通过进程模拟生产者与消费者的角色,并利用共享存储区来模拟缓冲区,进而实现了...
在IT领域,生产者消费者模型是一种经典的并发编程模式,它源于操作系统理论,用于解决资源的高效利用和同步问题。在本案例中,该模型被应用于一个使用Qt框架开发的多进程环境中,使得生产者进程与消费者进程能有效地...
Java多线程生产者消费者模型是一种典型的线程协作模式,用于解决并发编程中资源的高效利用和同步问题。在这个模型中,"生产者"线程负责生成数据,而"消费者"线程则负责处理这些数据。为了实现这种模式,Java提供了...
生产者,消费者,线程同步,模型,锁
### 生产者消费者模型模拟进程调度_操作系统实验报告 #### 实验目的 1. **掌握基本的同步互斥算法**:通过本次实验,学生能够理解并应用常见的同步互斥算法,如信号量(semaphore)机制,来解决多线程环境下的资源...
创建一个简单的生产者消费者模型,可以使用以下伪代码: ```java class Producer implements Runnable { private final BlockingQueue<String> queue; public Producer(BlockingQueue<String> queue) { this....
内容概要:操作系统实验,前端 vue3 + vite3 + pinia + ant design vue实现简易的生产者消费者模型,可以通过输入表单的形式手动调节生产者的消费速率和消费者的消费速率的形式,实现生产者消费者模型的可视化效果。...
LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC...
生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和...
生产者消费者模型是多线程编程中的一个经典设计模式,它在Java中有着广泛的应用。这个模型主要用于解决并发处理过程中的资源同步问题,确保生产者(数据生成者)和消费者(数据使用者)之间能有效协作,避免因数据...
### 生产者消费者模型模拟进程调度_操作系统课程设计报告 #### 一、生产者-消费者问题概述 生产者-消费者(Producer-Consumer)问题是一种典型的进程间通信问题,广泛应用于操作系统设计、计算机科学领域的教学...
在C#编程中,"生产者消费者模型"是一种常见的多线程设计模式,它通过分离数据的生产和消费过程,使得生产者线程可以专心于创建数据,而消费者线程则专注于处理这些数据,两者互不干扰,提高了系统效率。在这个模型中...
Java生产者消费者模型是多线程编程中的一个经典设计模式,它主要用来解决资源的共享问题,通过协调生产者和消费者之间的工作流程,避免资源的过度消耗或浪费。在这个模型中,生产者负责生成数据,而消费者则负责处理...