思考:1.为什么生产者和消费者中要使用while循环判断? 使用while循环可以让被唤醒的线程每次都判断标记,保障数据的准确性。
2.为什么使用了notifyAll? 因为需要唤醒对方线程(如生产者唤醒消费者),使用notify的话会出现只唤醒本方线程(如消费者唤醒消费者),导致程序中的线程都处于等待状态。
/*线程同步---生产一部电脑消费一部电脑*/
public class ComputerDemo
{
public static void main(String args[])
{
Computer com=new Computer();
Producer pro=new Producer(com);
Consumer con=new Consumer(com);
Thread t1=new Thread(pro);
Thread t2=new Thread(pro);
t1.setName("生产线程A");
t2.setName("生产线程B");
Thread t3=new Thread(con);
Thread t4=new Thread(con);
t3.setName("@@@@@消费线程C");
t4.setName("@@@@@消费线程D");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class Computer
{
private String name;
private int count=1;
private boolean flag=false;
public synchronized void set(String name)//生产电脑
{
while(flag)
{
try
{
this.wait();
}
catch (Exception e)
{
}
}
this.name=name+"--"+count++;
System.out.println(Thread.currentThread().getName()+"生产"+this.name);
flag=true;
notifyAll();
}
public synchronized void out()//消费电脑
{
while(!flag)
{
try
{
this.wait();
}
catch (Exception e)
{
}
}
System.out.println(Thread.currentThread().getName()+"消费"+this.name);
flag=false;
notifyAll();
}
}
class Producer implements Runnable
{
Computer com;
public Producer(Computer com)
{
this.com=com;
}
public void run()
{
while(true)
{
com.set("电脑~~");
}
}
}
class Consumer implements Runnable
{
Computer com;
public Consumer(Computer com)
{
this.com=com;
}
public void run()
{
while(true)
{
com.out();
}
}
}
分享到:
相关推荐
本示例中的“生产者-消费者”模型是一种经典的多线程问题,它模拟了实际生产环境中的资源分配与消耗过程。下面我们将详细探讨如何在Java中实现这个模型。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型...
在本场景中,我们关注的是一个经典的多线程问题——"生产者-消费者"模式。这个模式是解决资源管理与同步问题的一个有效策略,它在操作系统、并发编程和分布式系统等领域广泛应用。 生产者-消费者模型涉及到两个主要...
### Java多线程-生产者与消费者问题 #### 一、生产者与消费者问题概览 **1.1 概要** 生产者与消费者问题是计算机科学中一个多线程同步的经典问题。它描述了两个线程如何共享有限资源的场景:一个是生产者...
生产者-消费者问题是多线程同步的一个经典案例,主要探讨如何在并发环境下,确保生产者进程和消费者进程之间正确地共享资源,避免数据竞争和死锁。在这个问题中,生产者进程负责创建产品并将产品放入缓冲区,而消费...
### Linux下的多线程实例——生产者消费者模型 在Linux环境下进行多线程编程时,一个常见的应用场景就是通过生产者消费者模型来管理线程间的通信和数据共享问题。本篇文章将详细解析一个基于Linux环境下的多线程...
生产者-消费者问题是操作系统中经典的问题之一,它是指在多线程环境下,多个生产者线程和消费者线程访问同一个共享缓冲区,导致缓冲区的数据混乱和不一致的问题。 在解决生产者-消费者问题时,需要使用同步机制来...
本文将详细地阐述 Linux 下利用互斥锁、条件变量、线程管理等相关函数实现多线程生产者-消费者问题,以提高资源利用率。 线程基本概念 线程是进程的一条执行路径,它包含独立的堆栈和 CPU 寄存器状态,每个线程...
在并发编程中,"生产者-消费者"模式是一种经典的解决问题的范式,用于协调两个或更多线程间的协作,其中一部分线程(生产者)生成数据,另一部分线程(消费者)消费这些数据。 生产者-消费者模型的核心在于共享资源...
在本场景中,我们关注的是"生产者-消费者模型",这是一个经典的并发问题,通常用于展示线程间的协作与同步。这个模型是基于一个假设:有一个缓冲区,生产者线程负责往里面放入产品,而消费者线程则负责取出并消费...
【生产者消费者问题】是多线程编程中的经典问题,主要涉及到进程同步和互斥的概念。在操作系统中,生产者负责生成数据,而消费者则负责消耗这些数据。两者通过一个有限大小的缓冲区进行交互,当缓冲区满时,生产者...
生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...
在Java编程中,"线程同步--生产者消费者问题"是一个经典的多线程问题,它涉及到如何有效地在多个线程之间共享资源。这个问题通常用于演示和理解线程间的协作机制,如互斥锁、条件变量等。在此,我们将深入探讨这个...
生产者消费者模型是一种经典的线程同步问题,它模拟了实际生活中的生产过程和消费过程,使得生产者线程可以将数据生产出来,而消费者线程则负责消耗这些数据,两者之间通过共享数据结构进行协同工作。 生产者消费者...
生产者-消费者模式是一种经典的多线程设计模式,用于解决数据共享问题,尤其是在一个线程生产数据而另一个线程消费数据的情况下。在这个模式中,生产者负责生成数据并放入共享的数据结构(如队列),而消费者则从这...
生产者-消费者实例可以很好帮助初学java的同学们理解和学习多线程的知识
"典型的多线程--生产和消费"这个主题,通常指的是生产者-消费者问题,这是一种经典的设计模式,用于解决如何在一个数据结构(如队列)中高效地存储和检索数据,同时避免生产者过于快速地生成数据而消费者无法及时...
生产者-消费者问题是并发编程中的一个经典模型,它描述了两个或多个线程之间的协作,其中一个或多个线程(生产者)负责生成数据,而其他线程(消费者)则负责处理这些数据。在实际应用中,这可以对应于例如数据生成...
a: 创建一个线程 ...h: problem1 生产者消费者问题 (1生产者 1消费者 1缓冲区) problem1 more 生产者消费者问题 (1生产者 2消费者 4缓冲区) problem2 读者与写着问题 I: 信号量 semaphore 解决线程同步问题
设计要求:(1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者线程的标识符.(2)生产者和消费者各有两个以上.(3)多个生产者或多个消费者之间须有共享对缓冲区...