PriorityBlockingQueue

package com.bjsxt.base.coll013;

 

public class Task implements Comparable<Task>{

 

private int id ;

private String name;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

 

@Override

public int compareTo(Task task) {

// TODO Auto-generated method stub  

        //按照id进行升序排序  

        //如果对象本身的id大于传入的对象id,  

        //返回值是正数,就是升序排序  

        //返回值是负数,就是降序排序  

//      if(id>o.getId()) {  

//          return 1;  

//      } else if(id==o.getId()) {  

//          return 0;  

//      }  

//      return -1;  

//      return name.compareTo(o.getName());  

        if(this.id > task.id) {  

            return -1;  

        } else if(this.id == task.id) {  

            return 0;  

        }  

        return 1;  

    }  

public String toString(){

return this.id + "," + this.name;

 

}

 

}

 
package com.bjsxt.base.coll013;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.PriorityBlockingQueue;

/**
 * @author Administrator
 *PriorityBlockingQueue:基于优先级的堵塞队列。无界队列,队列对象必须实现Comparable接口。
 *注意:添加一个元素不会排序,只有调用task方法取行数的时候才会比较取值。
 */
public class UsePriorityBlockingQueue {

	
	public static void main(String[] args) throws Exception{
		
		
		PriorityBlockingQueue<Task> q = new PriorityBlockingQueue<Task>();
		
		Task t1 = new Task();
		t1.setId(40);
		t1.setName("id为3");
		Task t2 = new Task();
		t2.setId(30);
		t2.setName("id为4");
		Task t3 = new Task();
		t3.setId(10);
		t3.setName("id为1");
		
		//return this.id > task.id ? 1 : 0;
		q.add(t2);	//4
		q.add(t1);	//3
		q.add(t3);  //1
		
		// 1 3 4
		System.out.println("容器:" + q);
		System.out.println(q.take().getId());
		//System.out.println("容器:" + q);
		System.out.println(q.take().getId());
		System.out.println(q.take().getId());
		

		
	}
}

猜你喜欢

转载自barabbas.iteye.com/blog/2418411
今日推荐