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)可读性 让我们看看别人是怎么去分析,还有值得我们去学习的地方,也是我正在 ...
随机推荐
- [公告]Senparc.Weixin.MP v14.2.1 升级说明
在Senparc.Weixin.MP v14.2.1中,所有Senparc.Weixin.MP下的Container,命名空间已经从 Senparc.Weixin.MP.CommonAPIs 改为了 ...
- 每天一个linux命令(49):at命令
在windows系统中,windows提供了计划任务这一功能,在控制面板 -> 性能与维护 -> 任务计划, 它的功能就是安排自动运行的任务. 通过'添加任务计划'的一步步引导,则可建立一 ...
- Eclipse 常用快捷键 (动画讲解)
Eclipse有强大的编辑功能, 工欲善其事,必先利其器, 掌握Eclipse快捷键,可以大大提高工作效率. 编辑相关快捷键 注释 Ctrl + / 快速修复 Ctrl + ...
- 删除数据表中除id外其他字段相同的冗余信息
删除一个信息表中除id外其他字段都相同的冗余信息,如下 id name addr 1 a b 2 a b 3 b c 删除这个表中的冗余信息 即应该是 id name addr 1 a b 3 b c ...
- Atitit GRASP(General Responsibility Assignment Software Patterns),中文名称为“通用职责分配软件模式”
Atitit GRASP(General Responsibility Assignment Software Patterns),中文名称为"通用职责分配软件模式" 1. GRA ...
- Nginx配置文件nginx.conf详解
#定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; #全局错误日志定义类型,[ debug | ...
- sizzle分析记录:getAttribute和getAttributeNode
部分IE游览器下无法通过getAttribute取值? <form name="aaron"> <input type="text" name ...
- JAVA基础代码分享--学生成绩管理
问题描述: 从键盘读入学生成绩,找出最高分,并输出学生成绩等级. 成绩>=最高分-10 等级为’A’ 成绩>=最高分-20 等级为’B’ 成绩>=最高分-30 等级为’C’ ...
- Why Namespace? - 每天5分钟玩转 OpenStack(102)
上一节我们讨论了 Neutron 将虚拟 router 放置到 namespace 中实现了不同 subnet 之间的路由.今天探讨为什么要用 namespace 封装 router? 回顾一下前面的 ...
- 支持向量机原理(四)SMO算法原理
支持向量机原理(一) 线性支持向量机 支持向量机原理(二) 线性支持向量机的软间隔最大化模型 支持向量机原理(三)线性不可分支持向量机与核函数 支持向量机原理(四)SMO算法原理 支持向量机原理(五) ...