并发队列:PriorityBlockingQueue和DelayQueue案例使用
PriorityBlockingQueue使用
import java.util.concurrent.PriorityBlockingQueue;
/**
* @author :jiaolian
* @date :Created in 2021-02-03 15:44
* @description:priorityBlockingQueue优先级队列测试
* @modified By:
* 公众号:叫练
*/
public class PriorityBlockingQueueTest {
public static void main(String[] args) {
m2();
}
public static void m2() {
PriorityBlockingQueue priorityBlockingQueue = new PriorityBlockingQueue<>();
priorityBlockingQueue.add(new Student("叫练1",22));
priorityBlockingQueue.add(new Student("叫练2",21));
priorityBlockingQueue.add(new Student("叫练3",23));
while (!priorityBlockingQueue.isEmpty()) {
Student student = null;
try {
student = priorityBlockingQueue.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(student);
}
}
private static class Student implements Comparable {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Student o) {
//从大到小排队
return this.age - o.getAge();
}
}
}
如上代码:

DelayQueue使用
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
/**
* @author :jiaolian
* @date :Created in 2021-02-03 16:28
* @description:延迟队列测试
* @modified By:
* 公众号:叫练
*/
public class DelayQueueTest {
public static void main(String[] args) throws InterruptedException {
DelayQueue delayQueue = new DelayQueue();
delayQueue.add(new Student("叫练1",5));
delayQueue.add(new Student("叫练2",3));
delayQueue.add(new Student("叫练3",6));
while (!delayQueue.isEmpty()) {
System.out.println(delayQueue.take());
}
}
private static class Student implements Delayed {
private String name;
//触发时间/秒
private long time;
public String getName() {
return name;
}
public long getTime() {
return time;
}
public Student(String name, long time) {
this.name = name;
this.time = time*1000+System.currentTimeMillis();
}
@Override
public long getDelay(TimeUnit unit) {
//延迟时间小于0就出队列
long aa = time - System.currentTimeMillis();
return aa;
}
@Override
public int compareTo(Delayed o) {
//时间排序,从小到大排列
Student student = (Student) o;
return (int)(this.time - student.getTime());
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", time=" + time +
'}';
}
}
}
如上代码:

总结
今天我们的内容比较简单。喜欢的请点赞和评论哦!