生产者线程
public class ReadThread implements Runnable
{
BlockingQueue<String> blocking;
ReadThread(BlockingQueue<String> blocking)
{
this.blocking = blocking;
}
@Override
public void run()
{
read();
}
public void read()
{
try
{
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(new File("D://1.txt"))));
String line = "";
while ((line = br.readLine()) != null)
{
System.out.println("向队列中添加:"+line);
while (!blocking.offer(line))
{
System.out.println("队列已满 进行等待");
Thread.sleep(100);
}
}
ParseFileThread.idDone = true;
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
消费者线程
public class ParseThread implements Runnable
{
BlockingQueue<String> blocking;
ParseThread(BlockingQueue<String> blocking)
{
this.blocking = blocking;
}
@Override
public void run()
{
Parse();
}
public void Parse()
{
ExecutorService pool = Executors.newFixedThreadPool(3);
try
{
for (int i = 0; i < 3; i++)
{
pool.execute(new Runnable()
{
@Override
public void run()
{
while (true)
{
String line = blocking.poll();
if(ParseFileThread.idDone && line==null)
{
//已经处理完
System.out.println("任务已经出来完~ 进行退出");
return;
}
else if(!ParseFileThread.idDone && line==null)
{
System.out.println("队列已空!进行等待");
try
{
Thread.sleep(100);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}else if(!ParseFileThread.idDone && line!=null)
{
System.out.println("从队列中获取:"+line);
}
}
}
});
}
}
catch (Exception e)
{
e.printStackTrace();
}
pool.shutdown();
}
}
主函数
public class ParseFileThread
{
private static BlockingQueue<String> blocking = new LinkedBlockingQueue<String>(3);
public static Boolean idDone = false;
public static void main(String[] args)
{
ExecutorService executor = Executors.newFixedThreadPool(2);
executor.execute(new ReadThread(blocking));
executor.execute(new ParseThread(blocking));
executor.shutdown();
}
}
相关推荐
通过使用信号量机制,我们可以实现生产者消费者问题的同步,使得线程之间的访问顺序变得有序,从而避免了竞争关系带来的问题。 知识点: 1. 生产者消费者问题:一个经典的进程同步问题,用以演示信号量机制。 2. ...
C语言实现生产者消费者问题,分配具有n个缓冲区的缓冲池,作为共享资源。 定义两个资源型信号量empty 和full,empty信号量表示当前空的缓冲区数量,full表示当前满的缓冲区数量。 定义互斥信号量mutex,当某个进程...
LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC...
生产者消费者的实现。可以自主地改变生产者,消费者的数目,和缓冲区。
文件名`producer-consumer`很可能包含了实现这些逻辑的源代码文件,如`producer.cpp`和`consumer.cpp`,以及可能的主程序文件`main.cpp`,它们共同构成了完整的生产者-消费者问题的C++解决方案。 这个示例不仅展示...
生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...
5. 伪代码表示:伪代码表示了生产者消费者问题的解决方案,包括 declare 语句、produce 线程和 consume 线程的实现。 6. 源代码:源代码使用 VC++ 6.0 编译器编译,提供了完整的实现代码,包括头文件的引入、信号量...
在Linux下完整C语言实现生产者消费者问题的代码。其中涉及信号量、多线程、GCC编译、PV操作等基础知识。Linux下通过gcc - o yy xxx.c -pthread,再通过./yy即可运行。
在这个问题中,我们将探讨如何使用MFC来实现生产者消费者模型。 生产者消费者问题是这样设定的:有一组生产者线程负责生成数据(产品),而一组消费者线程则负责消耗这些数据。为了确保数据的正确传递和避免竞争...
### 编程实现生产者消费者或读写者的同步问题 #### 概述 本文将详细介绍如何通过编程方式解决生产者消费者问题,这是一个经典的多线程同步问题。在本例中,我们将采用C++语言结合Windows API来实现。该示例程序...
该实验旨在通过编程实现生产者与消费者的逻辑,了解进程间的互斥访问机制以及临界区的概念和作用。 #### 二、关键概念解释 **1. 临界区(Critical Section)** - **定义**:临界区是指一段程序中只能被单个进程或...
多线程实现生产者消费者模型:锁(Lock)、信号量(Semaphore、BoundedSemaphore)、条件(Condition)、队列(Queue)、事件(Event) 多进程程实现生产者消费者模型:信号量(Semaphore)、条件(Condition)、...
在Java中,`java.util.concurrent`包下的`BlockingQueue`接口提供了一种线程安全的数据结构,非常适合用于实现生产者消费者模式。生产者将产品放入队列,消费者从队列中取出产品。`BlockingQueue`提供了`put()`和`...
设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。说明:有界缓冲区内设有20 个存储单元,放入/取出的数据项设定为1‐20 这20 个整型数。设计要求:1)每个生产者和消费者对有界缓冲区...
通过这样的设计,可以实现生产者和消费者进程的并发执行,同时保证了资源的合理分配和避免了竞态条件的发生。这个模拟实现对于理解操作系统中的进程同步和互斥概念具有重要作用,也锻炼了编程和系统设计能力。
参考教材中的生产者消费者算法,创建5个进程,其中两个进程为生产者进程,3个进程为消费者进程。一个生产者进程试图不断地在一个缓冲中写入大写字母,另一个生产者进程试图不断地在缓冲中写入小写字母。3个消费者...
总之,MFC实现的生产者消费者问题展示了如何在多线程环境下有效管理共享资源,这对于理解和解决并发编程中的挑战非常有帮助。通过实践和学习这样的示例,开发者可以提升在Windows平台下进行多线程编程的能力。
在给定的程序中,作者使用了C语言和POSIX信号量来实现生产者消费者问题。程序中定义了一个共享结构体`shared_t`,其中包含了缓冲区、锁、可用信号量和空闲信号量等成员变量。生产者和消费者进程之间通过这些信号量来...
在Linux中,可以使用POSIX信号量来实现生产者和消费者的同步。信号量是一种计数器,可以用来限制对临界资源的访问数量。在生产者-消费者问题中,我们可以创建一个互斥信号量用于控制对缓冲区的独占访问,以及一个...
- **算法实现**:详细解释代码逻辑,包括关键函数和数据结构的设计,如生产者函数、消费者函数、初始化缓冲区和同步对象等。 - **测试与分析**:展示实验结果,分析在不同情况下系统的运行状态,如并发度对系统性能...