PriorityBlockingQueue 우선 순위 규칙
2609 단어 BlockingQueue
규칙은: 현재 다른 대상과 비교할 때,compare 방법이 마이너스로 되돌아오면 대기열 안의 우선순위를 비교합니다.
다음 테스트는 이 단언을 설명할 수 있다.
인쇄 결과를take에서 나온Entity와left의entity를 비교하고priority를 비교합니다
public class TestPriorityQueue {
static Random r=new Random(47);
public static void main(String args[]){
final PriorityBlockingQueue q=new PriorityBlockingQueue();
ExecutorService se=Executors.newCachedThreadPool();
//execute producer
se.execute(new Runnable(){
public void run() {
int i=0;
while(true){
q.put(new PriorityEntity(r.nextInt(10),i++));
try {
TimeUnit.MILLISECONDS.sleep(r.nextInt(1000));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
//execute consumer
se.execute(new Runnable(){
public void run() {
while(true){
try {
out.println("take-- "+q.take()+" left:-- ["+q.toString()+"]");
try {
TimeUnit.MILLISECONDS.sleep(r.nextInt(1000));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.println("shutdown");
}
}
class PriorityEntity implements Comparable<PriorityEntity> {
private static int count=0;
private int id=count++;
private int priority;
private int index=0;
public PriorityEntity(int _priority,int _index) {
this.priority = _priority;
this.index=_index;
}
public String toString(){
return id+"# [index="+index+" priority="+priority+"]";
}
// ,
public int compareTo(PriorityEntity o) {
return this.priority > o.priority ? 1
: this.priority < o.priority ? -1 : 0;
}
// ,
// public int compareTo(PriorityTask o) {
// return this.priority < o.priority ? 1
// : this.priority > o.priority ? -1 : 0;
// }
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PriorityBlockingQueue 우선 순위 규칙Priority BlockingQueue에 저장된 대상은Comparable 인터페이스를 실현하는 것이어야 합니다.대기열은 이 인터페이스의compare 방법을 통해 대상의priority를 확정합니다. 규칙은: 현재 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.