`
旧琴房时光
  • 浏览: 7758 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

数据缓冲机制

阅读更多
数据缓冲机制是指怎样往一个队列或者链表里面不停的存放以及删除数据。以下用最简单的模型实现,即用一个队列,里面最多存放一个数据,并且一直在不停地存放,删除。
以下有两种方式实现,第一种,使用传统的链表实现。
//ZRZn类,是一个数据类型,有一个public的id属性
public class ZRZn {
	public int id;
}
//生产者,向队列里添加数据
public class Producer extends Thread{
	private LinkedList<ZRZn> buffer;
	public Producer(LinkedList<ZRZn> buffer){
		this.buffer = buffer;
	}
	public void run(){
		int id = 0;

		while(true){
			synchronized (buffer) {
			if(buffer.size() == 0){
				id++;
				ZRZn temp = new ZRZn();
				temp.id = id;
				buffer.add(temp);
				System.out.println("向队列中加入了一个ZRZn对象,id是    "+temp.id);
				
					buffer.notify();
			}else{
			try {
				buffer.wait();
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			}
			}
		}
	}
}
//消费者,从队列里面拿出数据
public class Customer extends Thread{
	private LinkedList<ZRZn> buffer;
	public Customer(LinkedList<ZRZn> buffer){
		this.buffer = buffer;
	}
	public void run(){
		while(true){
			synchronized (buffer) {
			if(buffer.size() > 0){
				ZRZn temp = buffer.remove(0);
				System.out.println("从队列中拿出了一个ZRZn对象,id是   "+temp.id);
				buffer.notify();
			}else{
			try {
				buffer.wait();
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			}
			}
		}
	}
}
//主函数类,测试
public class Manage {
	    
	public static void main(String[] args) {
		//数据缓冲链表
	    java.util.LinkedList<ZRZn> buffer= new java.util.LinkedList<ZRZn>();
		Producer pr = new Producer(buffer);
		Customer cr = new Customer(buffer);
		pr.start();
		cr.start();
	}

}

以上方法使用常规的LinkedList链表,并运用了链表的notify()和wait()方法,用来执行存放和取出数据。
下一种是运用java.util.concurrent类里面的LinkedBlockingQueue队列,这种队列的优势是它里面自带的take()和put()方法在没有取得或者放入数据时会阻塞,这样就确保一定会一次性取出和放入数据。以下是代码,每个类的作用与上一种方法相同。
public class Customer extends Thread{
	private LinkedBlockingQueue<ZRZn> buffer;
	public Customer(LinkedBlockingQueue<ZRZn> buffer){
		this.buffer = buffer;
	}
	public void run(){
		int id = 0;
		while(true){
				id++;
				ZRZn temp = new ZRZn();
				temp.id = id;
				try {
					buffer.put(temp);
					System.out.println("向队列中加入了一个ZRZn对象,id是    "+temp.id);
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
		}
	}
}
public class Producer extends Thread{
	private LinkedBlockingQueue<ZRZn> buffer;
	public Producer(LinkedBlockingQueue<ZRZn> buffer){
		this.buffer = buffer;
	}
	public void run(){
		while(true){
				try {
					ZRZn temp = buffer.take();
					System.out.println("从队列中拿出了一个ZRZn对象,id是   "+temp.id);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}	
		}
	}
}
public class Manage {
	    
	public static void main(String[] args) {
		//数据缓冲链表
	    java.util.concurrent.LinkedBlockingQueue<ZRZn> buffer = new LinkedBlockingQueue<ZRZn>(1);
		Producer pr = new Producer(buffer);
		Customer cr = new Customer(buffer);
		pr.start();
		cr.start();
	}

}
0
1
分享到:
评论

相关推荐

    论文研究-视频会议系统中数据缓冲机制的研究.pdf

    在视频会议系统中,服务器端多媒体数据流的存储转发有其特殊的背景和要求,因而需要一个高性能的多媒体数据流的缓冲机制,该机制的高效与否是制约视频会议系统性能的关键因素之一。在传统的生产者/消费者模型的基础...

    探讨Oracle数据缓冲区内部机制

    数据缓冲区的内部机制基于一个称为“中点插入”的概念。新数据块在首次调入后并不立即移到最前面,而是需要经过多次使用才能进入最近使用列表的前列。这有助于区分数据块的热度,将频繁访问的数据块保持在内存中更长...

    PowerBuilder DataWindow的数据更新技术及应用.doc

    DataWindow的数据更新技术主要依赖于其内置的数据缓冲机制,这使得开发者能够在不立即提交到数据库的情况下对数据进行编辑和管理。 DataWindow的数据缓冲机制包括三个主要缓冲区:主记录缓冲区(Primary)、删除记录...

    流媒体系统同步机制和缓冲机制的研究与应用

    "流媒体系统同步机制和缓冲机制的研究与应用"这个主题聚焦于两个核心概念:同步和缓冲,它们是确保流媒体服务质量和用户体验的关键。 同步机制在流媒体系统中扮演着至关重要的角色。它主要解决的是在网络传输过程中...

    SQL Server数据库的缓冲机制

    ### SQL Server数据库的缓冲机制 #### 一、概述 在.NET Framework 2.0中引入了一个重要的特性——SQL缓存依赖(SQL Cache Dependency),这一机制主要用于确保缓存中的数据能够实时地反映数据库中的最新状态。当...

    C++实现缓冲区的类

    总之,这个C++实现的缓冲区类是理解和实践数据处理优化的重要工具,它展示了如何利用C++的特性来设计高效且灵活的数据缓冲机制。通过深入理解并运用此类,开发者可以提高程序的运行效率,降低系统资源消耗,从而提升...

    Oracle的数据缓冲区是如何工作

    总之,理解Oracle数据缓冲区的工作机制对于提升数据库性能至关重要。通过监控和优化数据块的热区和冷区分布,以及合理配置系统参数,可以有效地减少磁盘I/O,提高系统响应速度,进而实现更高效的数据库运行。

    串行FLASH数据缓冲区的管理(程序)

    然而,为了提高读取效率,通常会引入数据缓冲区来临时存储Flash中的数据,以便于快速访问。本文将深入探讨串行Flash数据缓冲区的管理程序,以及如何通过代码实现这一功能。 串行Flash的数据缓冲区管理涉及到以下几...

    有关Oracle数据缓冲区的内部机制剖析

    在Oracle数据库中,数据缓冲区的内部机制经过优化,特别是在Oracle 8i及以后的版本中,其管理策略变得更加高效。 在Oracle 8i之前,当数据块进入数据缓冲区时,它们会被添加到最近使用列表的前端。然而,从Oracle 8...

    环形缓冲区_环形buffer_

    它是一种利用有限内存空间实现先进先出(FIFO,First In First Out)原则的数据缓冲机制。环形缓冲区的特性使其能够在数据处理速度与数据产生速度不匹配时提供一种有效的平衡手段。 在C语言中实现环形缓冲区,通常...

    论文研究-基于虚拟数据中心的气田信息整合平台研究.pdf

    气田信息整合旨在实现自治、分布、异构数据源的信息共享与交换,为用户提供统一的全局数据视图。...考虑到系统性能和灵活性,该平台引入数据缓冲机制,采用多种数据交换策略,以XML作为数据交换和元数据表示的标准。

    stm32定时器+ADC+DMA+双缓冲 实现数据采集.rar_STM32双缓冲_STM32数据_adc双缓冲_stm32 dm

    DMA是STM32中一种高效的数据传输机制,它可以在不占用CPU资源的情况下,直接在存储器和外设之间传输数据。在ADC数据采集场景中,一旦ADC完成转换,DMA可以自动将结果从ADC的寄存器传输到内存,提高数据处理效率。STM...

    内存乒乓缓存机制和消息分发机制的C代码实现

    在C语言中实现内存乒乓缓冲机制和消息分发机制是计算机科学中用于提高数据处理效率的重要技术手段。本知识点将详细解读这些概念,并解析给定代码段中实现的具体策略。 ### 内存乒乓缓存机制 内存乒乓缓冲机制是一种...

    用Delphi建立通讯与数据交换服务器

    对Internet/Intranet、实时/非实时等不同的网络环境提供广泛的通讯与数据交换支持,并能对系统瘫痪网络故障等意外情况下的数据交换提供可跟踪可控制的数据缓冲机制,为企业应用系统提供了高可靠高性能的通讯保障。...

    VC++_下对大量实时数据的采集处理

    在讨论VC++环境下对大量实时数据采集处理时,首先需要了解实时数据采集系统在工控软件中扮演的角色。...在VC++环境下,通过合理地设计和实现多线程以及数据缓冲机制,可以达到优化系统性能的目的。

    播放PCM音频数据的双缓冲用法

    ### 播放PCM音频数据的双缓冲用法详解 #### 一、引言 在多媒体领域,尤其是音频处理方面,对于实时性有着极高的要求。为了确保音频播放的流畅性和减少延迟,开发者通常会采用双缓冲技术。本文将详细介绍在Windows...

    缓冲区数据输入与输出c语言源程序库.rar_数据缓冲_缓冲_缓冲区

    它们可以高效地处理大量数据,因为它们一次性读写多个字节,并且可以利用stdio库提供的缓冲机制。 ### 自定义缓冲区 除了使用stdio库提供的缓冲机制外,开发者还可以自定义缓冲区。例如,你可以创建一个足够大的...

    delphi的获取数据缓冲图片显示

    为了改善用户体验,开发者通常会采用数据缓冲和图像预加载的技术来实现流畅的显示效果。"delphi的获取数据缓冲图片显示"这个主题就是讨论如何在Delphi中有效地管理和显示在获取数据过程中的图片资源。 首先,理解...

    藏经阁-The Avant-garde of Apache NiFi.pdf

    2. 数据缓冲:Apache NiFi 支持数据缓冲机制,以确保数据的处理和传输。 3. 优先队列:Apache NiFi 支持优先队列机制,允许用户根据业务需求调整数据处理的优先级。 4. 流模板:Apache NiFi 提供了流模板机制,允许...

    实时数据缓冲.pptx

    数据流入流出的机制是确保数据缓冲系统高效运作的关键环节之一: 1. **数据流入机制**: - **数据采集**:通过各种传感器、设备或应用程序从多个源头获取实时数据。 - **数据传输**:使用低延迟通信协议(如MQTT...

Global site tag (gtag.js) - Google Analytics