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代码实现队列的优化的更多相关文章

  1. Java数组模拟队列 + 优化

    队列介绍 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则. 即:先存入队列的数据,要先取出.后存入的要后取出 示意图:(使用数组模拟队列示意图)  数组模拟队列 队列本身是有序列表 ...

  2. [大牛翻译系列]Hadoop(15)MapReduce 性能调优:优化MapReduce的用户JAVA代码

    6.4.5 优化MapReduce用户JAVA代码 MapReduce执行代码的方式和普通JAVA应用不同.这是由于MapReduce框架为了能够高效地处理海量数据,需要成百万次调用map和reduc ...

  3. Linkedin工程师是如何优化他们的Java代码的(转)

    英文原文:LinkedIn Feed: Faster with Less JVM Garbage 最近在刷各大公司的技术博客的时候,我在Linkedin的技术博客上面发现了一篇很不错博文.这篇博文介绍 ...

  4. java代码之美(11)---java代码的优化

    java代码的优化 随着自己做开发时间的增长,越来越理解雷布斯说的: 敲代码要像写诗一样美.也能理解有一次面试官问我你对代码有洁癖吗? 一段好的代码会让人看就像诗一样,也像一个干净房间会让人看去很舒服 ...

  5. Linkedin工程师是如何优化他们的Java代码的

    http://greenrobot.me/devpost/java-faster-less-jvm-garbage/ Linkedin工程师是如何优化他们的Java代码的 最近在刷各大公司的技术博客的 ...

  6. 如何优化JAVA代码

    通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化.一般有两种方案:即优化代码或更改设计方法.我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能 ...

  7. Java 性能优化手册 — 提高 Java 代码性能的各种技巧

    转载: Java 性能优化手册 - 提高 Java 代码性能的各种技巧 Java 6,7,8 中的 String.intern - 字符串池 这篇文章将要讨论 Java 6 中是如何实现 String ...

  8. 初试kafka消息队列中间件二(采用java代码收发消息)

    初试kafka消息队列中间件二(采用java代码收发消息) 上一篇 初试kafka消息队列中间件一 今天的案例主要是将采用命令行收发信息改成使用java代码实现,根据上一篇的接着写: 先启动Zooke ...

  9. java代码(11) ---java代码的优化

    java代码的优化 参考了一些Java开发手册有关代码的规范,觉得一段好的代码可以从三个维度去分析.1)性能,2)可扩展性,3)可读性 让我们看看别人是怎么去分析,还有值得我们去学习的地方,也是我正在 ...

随机推荐

  1. 【VC++技术杂谈002】打印技术之获取及设置系统默认打印机

    本文主要介绍如何获取以及设置系统的默认打印机. 1.获取系统中的所有打印机 获取系统中的所有打印机可以使用EnumPrinters()函数,该函数可以枚举全部的本地.网络打印机信息.其函数原型为: B ...

  2. Mac安装Bower

    1.安装bower,得首先安装node: brew install npm //npm是nodejs的程序包管理器,如果安装过nodejs,可忽略此步. 2.安装Git(因为需要从Git仓库获取一些代 ...

  3. AngularJs之一

    在讲正题之前,先说一下有关angular简介方面的信息: 1. angularJS  诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用 ...

  4. Android开发学习之路-Android N新特性-多窗口模式

    我们都知道,在最新的Android N系统中,加入了一个新的功能,就是多窗口模式.多窗口模式允许我们在屏幕上显示两个窗口,每个窗口显示的内容不同,也就是说,我们可以一遍看电视剧,一边聊微信. 这里我们 ...

  5. Android开发学习之路-图片颜色获取器开发(1)

    系列第一篇,从简单的开始,一步一步完成这个小项目. 颜色获取就是通过分析图片中的每个像素的颜色,来分析整个图片的主调颜色,有了主调颜色,我们可以用于图片所在卡片的背景或者标题颜色,这样整体感更加强烈. ...

  6. 关闭form上chrome的autofill

    Chrome的autofill会自动找到form中的type=password的元素,然后把这个元素前面的元素当做是用户名,它不在乎这个元素叫什么名字.这样又是注册又是登录,你会发现它自作聪明的aut ...

  7. 使用 fixed role 授予权限

    今天下午,Leader 发mail给我,要求授予某个User对数据库只读的权限. Step1,在SQL Server中为该用户创建一个Login和User,在创建User时,建立Login 和 Use ...

  8. 用Mindjet MindManager 15 打开文件后停止响应的解决方法

    这个是因为文件里面有很多规格不统一的注释(那个像小本子的图标[里面就是注释部分]),默认编码是utf-8的,如果不一样的话就会出现这个问题.网上大多数都是让咱们删掉注释再打开 弱弱的问一下,如果我都把 ...

  9. 视图必须派生自 WebViewPage 或 WebViewPage<TModel>

    后端汇总:http://www.cnblogs.com/dunitian/p/4523006.html#efmvc 后来发现原来吧web.config给删了 这就简单了,复制其他项目的web.conf ...

  10. 深入学习jQuery选择器系列第六篇——过滤选择器之状态选择器

    × 目录 [1]焦点状态 [2]哈希状态 [3]动画状态[4]显隐状态 前面的话 过滤选择器的内容非常多,本文介绍过滤选择器的最后一部分——状态选择器 焦点状态 :focus :focus选择器选择当 ...