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

这两篇解释的比较详细

posted @ 2016-11-11 17:15  麦子TMAC  阅读(347)  评论(0编辑  收藏  举报