JAVA 数据结构之Queue处理实例代码
java Queue处理
实例代码:
import java.util.LinkedList; import java.util.Queue; private static Queue<FrameStruct> frameQueue = new LinkedList<FrameStruct>(); private static Lock lock = new ReentrantLock(); private PlayerThread p = new PlayerThread();
从队列取数据进行处理:
private class PlayerThread extends Thread { @Override public void run() { FrameStruct frame; while(bPlayRun) { if(bCanFlush) { lock.lock(); while((frame=frameQueue.poll())!=null) { onFrame(frame.buf, 0, frame.len); try { Thread.sleep(30); } catch (InterruptedException e) { } } lock.unlock(); } } } }
另一线程将数据放入队列:
FrameStruct frame = new FrameStruct(); frame.buf = new byte[byteCount]; frame.len = byteCount; System.arraycopy(frameData, 0, frame.buf, 0, byteCount); lock.lock(); frameQueue.offer(frame); lock.unlock();
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关推荐
-
java集合框架 arrayblockingqueue应用分析
Queue ------------ 1.ArrayDeque, (数组双端队列) 2.PriorityQueue, (优先级队列) 3.ConcurrentLinkedQueue, (基于链表的并发队列) 4.DelayQueue, (延期阻塞队列)(阻塞队列实现了BlockingQueue接口) 5.ArrayBlockingQueue, (基于数组的并发阻塞队列) 6.LinkedBlockingQueue, (基于链表的FIFO阻塞队列) 7.LinkedBlockingDeque, (
-
解析Java中PriorityQueue优先级队列结构的源码及用法
一.PriorityQueue的数据结构 JDK7中PriorityQueue(优先级队列)的数据结构是二叉堆.准确的说是一个最小堆. 二叉堆是一个特殊的堆, 它近似完全二叉树.二叉堆满足特性:父节点的键值总是保持固定的序关系于任何一个子节点的键值,且每个节点的左子树和右子树都是一个二叉堆. 当父节点的键值总是大于或等于任何一个子节点的键值时为最大堆. 当父节点的键值总是小于或等于任何一个子节点的键值时为最小堆. 下图是一个最大堆 priorityQueue队头就是给定顺序的最小元素. prio
-
基于java中BlockingQueue的使用介绍
最近在维护一个java工程,在群里面也就聊起来java的优劣!无奈一些Java的终极粉丝,总是号称性能已经不必C++差,并且很多标准类库都是大师级的人写的,如何如何稳定等等.索性就认真研究一番,他们给我的一项说明就是,在线程之间投递消息,用java已经封装好的BlockingQueue,就足够用了. 既然足够用那就写代码测试喽,简简单单写一个小程序做了一番测试: 复制代码 代码如下: //默认包 import java.util.concurrent.*; import base.MyRunna
-
java中LinkedBlockingQueue与ArrayBlockingQueue的异同
相同: 1.LinkedBlockingQueue和ArrayBlockingQueue都实现了BlockingQueue接口: 2.LinkedBlockingQueue和ArrayBlockingQueue都是可阻塞的队列 内部都是使用ReentrantLock和Condition来保证生产和消费的同步: 当队列为空,消费者线程被阻塞:当队列装满,生产者线程被阻塞: 使用Condition的方法来同步和通信:await()和signal() 不同: 1.由上图可以看出,他们的锁机制不同 Li
-
java线程并发blockingqueue类使用示例
如果BlockingQueue是满的任何试图往里存东西的操作也会被阻断进入等待状态,直到BlockingQueue里有新的空间才会被唤醒继续操作. BlockingQueue提供的方法主要有: add(anObject): 把anObject加到BlockingQueue里,如果BlockingQueue可以容纳返回true,否则抛出IllegalStateException异常. offer(anObject):把anObject加到BlockingQueue里,如果BlockingQueue
-
java中queue接口的使用详解
Queue接口与List.Set同一级别,都是继承了Collection接口.LinkedList实现了Queue接口.Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用.BlockingQueue 继承了Queue接口. 队列是一种数据结构.它有两个基本操作:在队列尾部加人一个元素,和从队列头部移除一个元素就是
-
JAVA 数据结构之Queue处理实例代码
java Queue处理 实例代码: import java.util.LinkedList; import java.util.Queue; private static Queue<FrameStruct> frameQueue = new LinkedList<FrameStruct>(); private static Lock lock = new ReentrantLock(); private PlayerThread p = new PlayerThread();
-
Java编程一道多线程问题实例代码
前面几篇博文基本上总结了一下java并发里的一些内容,这篇博文主要从一个问题入手,看看都能用到前面总结的哪些并发技术去解决. 题目描述: 模拟一个场景:处理16条日志记录,每条日志记录打印时间需要1秒,正常情况下如果将这16条记录去部打完需要16秒,现在为了提高效率,准备开启4个线程去打印,4秒钟打印完,实现这个demo. 先来分析一下这个题目,关于这16条日志记录,我们可以在主线程中产生出来,这没用什么难度,关键是开启4个线程去执行,现在有两种思路:一种是日志的产生和打印日志的线程在逻辑上分开
-
java队列之queue用法实例分析
Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构 Queue接口与List.Set同一级别,都是继承了Collection接口.LinkedList实现了Deque接 口. Queue的实现 1.没有实现的阻塞接口的LinkedList: 实现了java.util.Queue接口和java.util.AbstractQueue接口 内置的不阻塞队列: PriorityQueue 和 ConcurrentLinkedQueue PriorityQueue 和 Concurren
-
Java实现单链表翻转实例代码
Java实现单链表反转,递归和非递归两种形式 /** * 反转单链表 */ /** * 定义链表 * * @author 16026 * */ class Node { int val; Node next; public Node(int val) { this.val = val; } } public class ReverseList { /** * 反转链表 * * @param head * @return */ public static Node reverseList(Node
-
C语言中数据结构之链表归并排序实例代码
C语言中数据结构之链表归并排序实例代码 问题 设有两个无头结点的单链表,头指针分别为ha,hb,链中有数据域data,链域next,两链表的数据都按递增排序存放,现要求将hb表归到ha表中,且归并后ha仍递增序,归并中ha表中已有的数据若hb中也有,则hb中的数据不归并到ha中,hb的链表在算法中不允许破坏. 源程序 #include <stdio.h> #include<stdlib.h> #define N1 6 /*链表La的长度*/ #define N2 6 /*链表Lb的
-
Java实现FTP服务器功能实例代码
FTP(File Transfer Protocol 文件传输协议)是Internet 上用来传送文件的协议.在Internet上通过FTP 服务器可以进行文件的上传(Upload)或下载(Download).FTP是实时联机服务,在使用它之前必须是具有该服务的一个用户(用户名和口令),工作时客户端必须先登录到作为服务器一方的计算机上,用户登录后可以进行文件搜索和文件传送等有关操作,如改变当前工作目录.列文件目录.设置传输参数及传送文件等.使用FTP可以传送所有类型的文件,如文本文件.二进制可执
-
Java执行hadoop的基本操作实例代码
Java执行hadoop的基本操作实例代码 向HDFS上传本地文件 public static void uploadInputFile(String localFile) throws IOException{ Configuration conf = new Configuration(); String hdfsPath = "hdfs://localhost:9000/"; String hdfsInput = "hdfs://localhost:9000/user/
-
C++语言数据结构 串的基本操作实例代码
C语言数据结构 串的基本操作实例代码 输出结果: 实现代码: #include<iostream> using namespace std; typedef int Status; #define Max 20 #define OK 1 #define ERROR 0 #define OVERLOE -2 typedef struct//堆分配表示串 { char *ch; int length; }HString; //====================================
-
java List 排序之冒泡排序实例代码
java List 排序之冒泡排序实例代码 List排序,这里介绍两种排序: 1.Collections.sort()排序: 假如List集合中放的是Menu对象. public class Menu{ private int id; private String name; private int seq;//自定义排序字段 //构造函数.getter.setter省略....... } List<Menu> menus=new ArrayList<Menu>(); menus.
-
java中的 toString()方法实例代码
前言: toString()方法 相信大家都用到过,一般用于以字符串的形式返回对象的相关数据. 最近项目中需要对一个ArrayList<ArrayList<Integer>> datas 形式的集合处理. 处理要求把集合数据转换成字符串形式,格式为 :子集合1数据+"#"+子集合2数据+"#"+....+子集合n数据. 举例: 集合数据 :[[1,2,3],[2,3,5]] 要求转成为 "[1,2,3]#[2,3,5]"
随机推荐
- JavaScript将数据转换成整数的方法
- 细说浏览器特性检测(2)-通用事件检测
- 自己动手实现jQuery Callbacks完整功能代码详解
- php使用smtp发送支持附件的邮件示例
- Python实现好友全头像的拼接实例(推荐)
- 简单学习Python time模块
- 不使用ajax实现无刷新提交表单
- 神奇的代码 通杀各种网站-可随意修改复制页面内容
- Java JDK 动态代理的使用方法示例
- jQuery实现边框动态效果的实例代码
- JQuery+CSS实现图片上放置按钮的方法
- 谈一谈jQuery核心架构设计
- 编写针对IE的JS代码两种编写方法
- 使用Dreamhost空间下Shell命令的使用方法
- 将文件夹下所有文件输出到日志文件中 c#递归算法学习示例
- 基于BootStrap与jQuery.validate实现表单提交校验功能
- Bootstrap警告(Alerts)的实现方法
- 动态载入js提高网页打开速度的方法
- Android使用AIDL实现两个App间通信
- PHP分享图片的生成方法