- 浏览: 96563 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
snow8261:
new的对象,满足逃逸分析的不会逃逸的对象才会放在栈里,其他都 ...
Java中栈溢出解决办法 -
Champion_93:
...
滚动图片,滚动文字,滚动任何东西 -
jojo_java:
wzq110120 写道哈哈,,,,w3c的例子
呵呵,是呀
xml+css显示数据 -
wzq110120:
哈哈,,,,w3c的例子
xml+css显示数据 -
jojo_java:
鸟哥哥 写道jojo_java 写道鸟哥哥 写道怎么可能
? ...
禁止查看源文件
package me2.jojo.MessageQueue; import me2.core.data.ResultMessage; /** * Description:修改指针的实现<br> * * @author JOJO * @version 0.1 */ public class ResultMsgQueue { private int size; private int currCount; private int dSize; private int priority; private ResultMessage elements[]; private int next[]; private int[] previous; private int p[][]; private int emptyP_Head; private int emptyP_Tail; public ResultMsgQueue(int _size, int _priority) { size = _size; currCount = 0; priority = _priority; dSize = size / 4; elements = new ResultMessage[size]; next = new int[size]; previous = new int[size]; p = new int[priority][2]; for (int i = 0; i < priority; i++) { p[i][0] = -1; p[i][1] = -1; } for (int i = 0; i < size; i++) { next[i] = i + 1; } emptyP_Head = 0; emptyP_Tail = size - 1; } public ResultMsgQueue() { this(8, 3); } private/* synchronized */int allocate () { int index = emptyP_Head; if (emptyP_Head != emptyP_Tail) { emptyP_Head = next[emptyP_Head]; } else { emptyP_Tail = emptyP_Head = -1; } return index; } public synchronized int put (ResultMessage element) { int index = allocate(); if (index == -1) { // printAll(); this.distoryPolicy(dSize); return -1; } int priority = element.getPriority(); elements[index] = element; currCount++; if (p[priority][0] == -1) { p[priority][0] = index; // 挂接到前面的指针 int[] previousP = this.getPreviousPointer(priority); if (previousP != null) { next[previousP[1]] = index; previous[index] = previousP[1]; } } else { // 插入操作 next[p[priority][1]] = index; previous[index] = p[priority][1]; } // 链接后面的指针 int[] nextP = this.getNextPointer(priority); if (nextP != null) { next[index] = nextP[0]; previous[nextP[0]] = index; } p[priority][1] = index; return index; } public synchronized ResultMessage get () { ResultMessage element = null; for (int i = 0; i < priority; i++) { if (p[i][0] != -1) { int n = p[i][0]; element = elements[n]; elements[n] = null; currCount--; if (p[i][0] == p[i][1]) { p[i][0] = -1; p[i][1] = -1; } else { p[i][0] = next[n]; } /** ************ */ if (emptyP_Tail == -1) { emptyP_Head = n; emptyP_Tail = n; } else { next[emptyP_Tail] = n; emptyP_Tail = n; } /** ************ */ return element; } } return element; } public void printAll () { for (int i = 0; i < size; i++) { System.out.println(elements[i]); } System.out.println(); } private synchronized void distoryPolicy (int size) { //System.out.println("总数:" + currCount); int[] lastP = this.getLastPointer(); if (lastP != null) { int index = lastP[1]; emptyP_Tail = index; while (size > 0) { int n = elements[index].getPriority(); elements[index] = null; if (p[n][0] == p[n][1]) { p[n][0] = -1;// .reset(); p[n][1] = -1; } else { p[n][1] = previous[index]; } emptyP_Head = index; index = previous[index]; currCount--; size--; } } //System.out.println("销毁之后:" + currCount); } /** * 返回当前队列中的报文数量 * * @return 队列中的报文数量 */ public int size () { return currCount; } public void printFormFirst () { ResultMessage element = null; while ((element = get()) != null) { System.out.println(element); } System.out.println(); } private int[] getFirstPointer () { return this.getNextPointer(-1); } private int[] getLastPointer () { return this.getPreviousPointer(priority); } private int[] getNextPointer (int _priority) { int n = this.priority - 1; while (_priority < n) { if (p[++_priority][0] != -1) return p[_priority]; } return null; } private int[] getPreviousPointer (int priority) { while (priority > 0) { if (p[--priority][1] != -1) return p[priority]; } return null; } }
发表评论
-
二维码生成
2012-12-05 13:12 698http://blog.csdn.net/about58238 ... -
配置solr
2012-11-07 09:27 0<?xml version="1.0&q ... -
Clear Special character
2012-11-05 09:33 645public static String[] an ... -
List在foreach时删除元素快速失败
2011-07-08 16:13 2307package collection; impor ... -
Eclipse+CDT+MinGW+Qt开发环境搭建
2010-09-17 17:25 1945Eclipse+CDT+MinGW+Qt开发环境搭建下载软件 ... -
Java中栈溢出解决办法
2010-09-17 10:42 2770由于java自动分配与拾取内存空间,我们无法用动态分配堆栈的大 ... -
Swing JFrame全屏
2010-09-11 21:44 2067import java.awt.DisplayMode; i ... -
分享一个MyEclipse的注册机
2010-06-21 09:05 656package test; import java.io ... -
ReadWriteLock
2010-04-21 15:20 881public final class ReadWriteLoc ... -
FontTest
2010-02-08 11:14 791package others; import java. ... -
两个简单的Client实例
2010-01-05 20:33 899[code="java"] ... -
图片加载器
2009-06-01 13:07 1068import javax.swing.Icon; impor ... -
关于权限管理的思考
2009-04-29 14:00 803public class Main { publi ... -
RMI 应用
2009-03-30 15:00 907import java.rmi.Remote; import ... -
Dom4J使用(Xpath)
2009-03-27 18:13 1083import java.io.File; import jav ... -
获取IP地址的位置
2009-03-27 17:02 850public class SearchIP { pu ... -
Log4j配置
2009-03-27 16:55 843log4j.rootLogger = debug,A1,R ... -
读取Properties文件
2009-03-27 16:52 963import java.io.File; import jav ... -
java.text包中的Formatter使用
2009-03-27 16:44 1254import java.text.MessageFormat; ...
相关推荐
MessageQueue,又称消息队列,是C#中处理异步通信和解耦组件的重要技术。它允许应用程序之间通过消息传递数据,而无需彼此直接交互。下面将详细介绍C#中的MessageQueue以及如何使用它来发送和接收消息。 1. **...
在Android开发中,Message Queue是一种重要的机制,用于在不同线程间进行异步通信和任务调度。理解并熟练运用Message Queue、Looper和Handler是构建高效、响应性良好的Android应用的关键。 1. **Message Queue...
在Android系统中,Handler、Looper和MessageQueue是实现线程间通信的核心组件,它们共同构建了一个消息处理机制。本文将深入解析这三者的源码,帮助你理解它们的工作原理,并教你如何手写一套自己的Handler系统。 ...
### Message,MessageQueue,Looper,Handler详解 #### 一、几个关键概念 ##### 1、MessageQueue:消息队列 MessageQueue是一种数据结构,顾名思义,它充当了一个消息队列的角色,用来存放各种消息对象。每一个线程...
在深入理解 Handler、Looper 和 MessageQueue 的工作原理后,我们可以利用它们实现更复杂的异步任务处理,如定时任务、延时操作以及多个消息的有序处理等。同时,它们也是 Android 中其他异步处理机制(如 AsyncTask...
在Android系统中,MessageQueue和Looper是两个非常关键的组件,它们构成了消息处理机制的核心,尤其是在UI线程中。理解并有效地使用它们对于编写高效、响应迅速的Android应用至关重要。 `Looper`是Android中的一个...
在Android系统中,MessageQueue是消息机制的核心组件之一,它与Handler、Looper紧密协作,用于实现线程间的通信。理解MessageQueue的工作原理对于优化应用程序性能和处理异步操作至关重要。 MessageQueue是一个内部...
### Android的消息处理机制详解 #### 一、引言 Android应用程序是通过消息驱动的,它...通过合理使用Message、MessageQueue、Handler和Looper,开发者可以轻松地实现线程间的通信,从而提升应用的性能和用户体验。
MessageQueue queue = new MessageQueue(queuePath); Message msg = new Message(message); queue.Send(msg); } ``` 这里的`queuePath`是队列的路径,例如`".\private$\myQueue"`。`msg`是包含要发送数据的消息...
MessageQueue消息服务器** - **核心组件**:处理消息的接收、存储和分发。 **2. 代理** - **作用**:作为客户端与消息服务器之间的中介。 - **功能**:负载均衡、路由、安全认证等。 **3. 连接服务** - **定义**...
在Android系统中,线程(Thread)、Looper、Handler、Message以及MessageQueue和MessagePool是实现异步消息处理机制的关键组件,它们共同构建了一个高效的事件驱动模型。这些组件的关系紧密,协同工作,使得Android...
在Android操作系统中,MessageQueue是实现线程间通信和异步处理的核心组件。它与Handler、Looper紧密协作,构成了Android消息传递机制的基础。本压缩包文件"android_os_MessageQueue.rar_android"显然关注的是这一...
### Message Queue(消息队列)介绍与应用 #### 消息处理中的主要概念 消息队列作为一种关键的技术组件,在分布式系统中发挥着重要的作用。它主要用于处理和传递数据单元(即消息),这些消息可以在简单的文本字符串...
标题中的"sun-jms.rar_jms_message queue"表明我们关注的是Sun Microsystems实现的JMS规范,以及Message Queue这一特定的消息中间件。Sun Microsystems的Message Queue是早期Oracle公司提供的一个JMS兼容的消息代理...
在实现过程中,MSMQ提供了API接口,如`CreateQueue`用于创建队列,`SendMessage`用于发送消息,`ReceiveMessage`用于接收消息等。开发者可以通过这些API在应用程序中集成MSMQ功能。 消息队列还有一些关键特性,例如...
在“MessageQueue_Five_version”这个项目中,我们可以推测作者可能使用了其中的一种或多种实现,通过编程接口来创建消息队列,然后在生产者和消费者之间进行消息传递。 接下来,我们讨论Google的语音识别API。...
在Android系统中,Message, MessageQueue, Looper, 和 Handler共同构成了一个跨线程通信机制,使得UI线程和其他工作线程之间能安全地交换数据和执行任务,这对于实现复杂的异步操作和保持用户界面的响应性至关重要。...
在Android开发中,Handler、Looper和MessageQueue是用于实现线程间通信的关键组件,它们共同构建了一个消息处理机制。理解这三个概念以及它们之间的关系对于优化应用程序的性能和响应性至关重要。 Handler(处理器...
本文详细介绍了Android中消息处理机制的核心组件Looper、MessageQueue和Handler的工作原理及其实现细节。理解这些概念有助于开发者更好地设计和实现多线程应用程序,提高程序的性能和用户体验。通过合理利用这些组件...