java代码实现队列的优化
package com.voole.queun;
/**
* @Decription 队列
* @author TMAC-J
*
*/
public class Queun {
/**
* 初始化队列尺寸
*/
private int queunSize = 0;
/**
* 初始化头指针
*/
private int front = -1;
/**
* 初始化尾指针
*/
private int rear = 0;
/**
* 声明数组
*/
private int[] array;
/**
* 当前大小
*/
private int curentSize = 0;
/**
* 构造方法
* @param queunSize
*/
public Queun(int queunSize){
this.queunSize = queunSize;
array = new int[this.queunSize];
}
/**
* 读操作
*/
public synchronized void read(){
if(!isEmpty()){
front = (front+1)%queunSize;
array[front] = null;
curentSize--;
}
else{
System.out.println("当前队列为空!");
/**
* 优化CPU时间片的利用率,若当前队列为空会切换到另外的线程,不会继续执行此线程浪费时间和空间
*/
try {
this.notifyAll();//唤醒其他所有线程
this.wait();//释放对象锁,将当前线程置为阻塞
this.notify();//唤醒当前线程
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("front"+front);
}
/**
* 写操作
* @param data
*/
public synchronized void write(int data){
if(!isFull()){
array[rear] = data;
rear = (rear+1)%queunSize;
curentSize++;
}
else{
System.out.println("当前队列已满");
try {
this.notifyAll();
this.wait();
this.notify();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("rear"+rear);
} /**
* 判断是否是满
*/
public boolean isFull(){
if(curentSize == queunSize){
return true;
}
else{
return false;
}
}
/**
* 判断是否是空
*/
public boolean isEmpty(){
if(curentSize == 0){
return true;
}
else{
return false;
}
}
public Object getQueunHead(){
return array[(front+1)%queunSize];
}
}
package com.voole.queun; public class Test { public static void main(String[] args) {
Queun queun = new Queun(10);
Thread writeThread = new Thread(new WriteThread(queun));
writeThread.start();
Thread readThread = new Thread(new ReadThread(queun));
readThread.start();
} private static class ReadThread implements Runnable{
private Queun queun;
public ReadThread(Queun queun){
this.queun = queun; }
@Override
public void run() {
int i = 100;
if(queun!=null){
while(i>0){
queun.read();
// System.out.println("read"+i);
i--;
}
}
}
} private static class WriteThread implements Runnable{
private Queun queun;
public WriteThread(Queun queun){
this.queun = queun;
}
@Override
public void run() {
int i = 100;
if(queun!=null){
while(i>0){
queun.write(i);
// System.out.println("write"+i);
i--;
}
}
}
}
}
现在在实习,每天也就改改bug,利用闲暇时间,研究一下数据结构,收货还是蛮大的,这是队列的优化java代码实现方式。如果还有什么想要了解的,可以参考一下http://blog.csdn.net/sinat_33713995/article/details/51331314和https://zhidao.baidu.com/question/1947170630893457148.html
这两篇解释的比较详细
java代码实现队列的优化的更多相关文章
- Java数组模拟队列 + 优化
队列介绍 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则. 即:先存入队列的数据,要先取出.后存入的要后取出 示意图:(使用数组模拟队列示意图) 数组模拟队列 队列本身是有序列表 ...
- [大牛翻译系列]Hadoop(15)MapReduce 性能调优:优化MapReduce的用户JAVA代码
6.4.5 优化MapReduce用户JAVA代码 MapReduce执行代码的方式和普通JAVA应用不同.这是由于MapReduce框架为了能够高效地处理海量数据,需要成百万次调用map和reduc ...
- Linkedin工程师是如何优化他们的Java代码的(转)
英文原文:LinkedIn Feed: Faster with Less JVM Garbage 最近在刷各大公司的技术博客的时候,我在Linkedin的技术博客上面发现了一篇很不错博文.这篇博文介绍 ...
- java代码之美(11)---java代码的优化
java代码的优化 随着自己做开发时间的增长,越来越理解雷布斯说的: 敲代码要像写诗一样美.也能理解有一次面试官问我你对代码有洁癖吗? 一段好的代码会让人看就像诗一样,也像一个干净房间会让人看去很舒服 ...
- Linkedin工程师是如何优化他们的Java代码的
http://greenrobot.me/devpost/java-faster-less-jvm-garbage/ Linkedin工程师是如何优化他们的Java代码的 最近在刷各大公司的技术博客的 ...
- 如何优化JAVA代码
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化.一般有两种方案:即优化代码或更改设计方法.我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能 ...
- Java 性能优化手册 — 提高 Java 代码性能的各种技巧
转载: Java 性能优化手册 - 提高 Java 代码性能的各种技巧 Java 6,7,8 中的 String.intern - 字符串池 这篇文章将要讨论 Java 6 中是如何实现 String ...
- 初试kafka消息队列中间件二(采用java代码收发消息)
初试kafka消息队列中间件二(采用java代码收发消息) 上一篇 初试kafka消息队列中间件一 今天的案例主要是将采用命令行收发信息改成使用java代码实现,根据上一篇的接着写: 先启动Zooke ...
- java代码(11) ---java代码的优化
java代码的优化 参考了一些Java开发手册有关代码的规范,觉得一段好的代码可以从三个维度去分析.1)性能,2)可扩展性,3)可读性 让我们看看别人是怎么去分析,还有值得我们去学习的地方,也是我正在 ...
随机推荐
- 控制Linux下 mono 服务的启动停止
当Window下的服务部署到Linux的时候,我们一般用Mono.service 来启动停止.参数比较多,不太好用.于是有个这个Shell脚本. 用法:moa s1 start #启动 ...
- Atitit 查询优化器的流程attilax总结
Atitit 查询优化器的流程attilax总结 1.1. 来理解该过程:1 1.2. 关于这些优化器的最重要原则的就是:尽可能的减少扫描范围,2 1.3. .筛选条件分析2 1.4. 二.索引优化2 ...
- tomcat 的优化配置
一.关于并发连接量的配置 在tomcat的server.xml配置文件中:将<Connector port="8080" protocol="HTTP/1.1&qu ...
- javascript的canvas绘图的基本用法
<canvas>是HTML里面非常强大的元素,利用它结合js可以实现很多动画效果,大大增强交互性.下面,我想用图文并茂的方式阐述一下canvas的绘图机制的基础内容,话不多说,先上代码: ...
- 实战Hybird app:内存溢出与优化
pheongap项目:http://www.nduoa.com/apk/detail/646816 主要的问题: heap过大,内存低性能差的机子上引起奔溃,直接退出 关于web app的优化,不仅仅 ...
- PS批处理的使用
一. 前言 做开发的时候,最多的时候就是图片的使用了.有时候图片的处理都按照同样的步骤,比如说统一将图片的大小调整为固定大小,或者统一在所有的图片的的某个位置上加入文字或者小图片等等,这时候PS的批处 ...
- ASP.NET Web API 创建帮助页
1. 安装 Microsoft.AspNet.WebApi.HelpPage 程序包 Install-Package Microsoft.AspNet.WebApi.HelpPage 2. 注册 Ar ...
- 小菜学习设计模式(二)—单例(Singleton)模式
前言 设计模式目录: 小菜学习设计模式(一)—模板方法(Template)模式 小菜学习设计模式(二)—单例(Singleton)模式 小菜学习设计模式(三)—工厂方法(Factory Method) ...
- C算法编程题(三)画表格
前言 上一篇<C算法编程题(二)正螺旋> 写东西前还是喜欢吐槽点东西,要不然写的真还没意思,一直的想法是在博客园把自己上学和工作时候整理的东西写出来和大家分享,就像前面写的<T-Sq ...
- aud$定位错误用户密码登陆数据库的具体信息
环境:Oracle 11.2.0.3 客户端使用错误的用户密码登陆数据库 查询最近1天由于密码错误登陆失败的信息 查询当前审计中有哪些returncode值 1. 客户端使用错误的用户密码登陆数据库 ...