并发编程复习(八):队列相关
发布日期:2021-11-13 10:21:45
浏览次数:10
分类:技术文章
本文共 5669 字,大约阅读时间需要 18 分钟。
package cn.lh.queue;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Queue;import java.util.concurrent.*;/** * @Author Lee_Hoo * @DATE Created in 2017/9/22 * @Description: ConcurrentLinkedQueue是一个适用于高并发场景下的并发队列,非阻塞,通过无锁方式,实现高并发状态下的高性能,通常它 * 的性能高于BlockingQueue, * 它是一个基于链接节点的无界线程安全队列,先进先出。 * 主要方法:add()和offer()都是加入元素方法,在ConcurrentLinkedQueue中没有区别 * poll()和peek()都是去元素,区别是前者会删除元素,后者不会 * BlockingQueue:阻塞队列,有五个实现类 * ArrayBlockingQueue:内部维护定长数组,没有实现读写分离,生产和消费不能完全并行,可以指定先进先出或者先进后出, * 也叫有界队列。 * LinkeedBlockingQueue:基于链表的阻塞队列,采用读写分离,从而实现生产和消费完全的并行,是一个无界队列。 * SynchronousQueue:没有缓冲的队列,生产出的数据会直接被消费者获得被消费 */public class MyQueue { public static void main(String[] args) throws InterruptedException { //高性能的无界无阻赛队列:ConcurrentLinkedQueue Queue q = new ConcurrentLinkedQueue(); q.add("a"); q.offer("b"); q.add("v"); q.add("d"); System.out.println(q.peek()); System.out.println(q.size()); System.out.println(q.poll()); System.out.println(q.size()); //之所以有界,在于构造时就要指定大小 Queue
Task类:
package cn.lh.queue;import org.jetbrains.annotations.NotNull;/** * @Author Lee_Hoo * @DATE Created in 2017/9/22 * @Description: */public class Task implements Comparable网吧场景详解DelayQueue队列:{ private int id; private String name; public Task(int id, String name) { this.id = id; this.name = name; } public Task() { } 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(@NotNull Task task) { return this.id>task.id?1:(this.id
网吧类:
package cn.lh.queue;import java.util.concurrent.DelayQueue;/** * @Author Lee_Hoo * @DATE Created in 2017/9/22 * @Description: */public class WangBa implements Runnable{ private DelayQueue网民类:queue = new DelayQueue<>(); public boolean yingye = true; public void shangji(String name,String id,int money){ WangMing wm = new WangMing(id,name,1000*money+System.currentTimeMillis()); System.out.println("网民"+name+"身份证"+id+"交钱"+money+"块"+"开始上机"); this.queue.add(wm); } public void xiaji(WangMing wm){ System.out.println("网名"+wm.getName()+"身份证"+wm.getId()+"下机"); } @Override public void run() { try { while (yingye){ WangMing man = queue.take(); xiaji(man); } }catch (Exception e){ e.printStackTrace(); } } public static void main(String[] args) { try { System.out.println("开始营业"); WangBa wb = new WangBa(); Thread shangwang = new Thread(wb); shangwang.start(); wb.shangji("张三","123",1); wb.shangji("李四","555",10); wb.shangji("王五","789",5); }catch (Exception e){ e.printStackTrace(); } }}
package cn.lh.queue;import org.jetbrains.annotations.NotNull;import java.util.concurrent.Delayed;import java.util.concurrent.TimeUnit;/** * @Author Lee_Hoo * @DATE Created in 2017/9/22 * @Description: */public class WangMing implements Delayed { private String id; private String name; private long endTime; private TimeUnit timeUnit = TimeUnit.SECONDS; public WangMing(String id, String name, long endTime) { this.id = id; this.name = name; this.endTime = endTime; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public long getEndTime() { return endTime; } public void setEndTime(long endTime) { this.endTime = endTime; } @Override public long getDelay(@NotNull TimeUnit unit) { return endTime-System.currentTimeMillis(); } @Override public int compareTo(@NotNull Delayed o) { WangMing w = (WangMing) o; return this.getDelay(this.timeUnit)-w.getDelay(this.timeUnit)>0?1:0; }}
转载地址:https://blog.csdn.net/Lee_Ho_/article/details/78063497 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月01日 16时40分00秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
boost::geometry::num_geometries用法的测试程序
2019-04-26
boost::geometry::num_interior_rings用法的测试程序
2019-04-26
boost::geometry::model::multi_point用法的测试程序
2019-04-26
MyBatis源码分析_框架原理图
2019-04-26
boost::geometry::num_points用法的测试程序
2019-04-26
boost::geometry::num_segments用法的测试程序
2019-04-26
MyBatis源码分析-7 MyBatis日志系统实现原理
2019-04-26
boost::geometry::point_on_surface用法的测试程序
2019-04-26
boost::geometry::remove_spikes用法的测试程序
2019-04-26
boost::geometry::transform用法的测试程序
2019-04-26
boost::geometry::cross_product用法的测试程序
2019-04-26
boost::geometry::dot_product用法的测试程序
2019-04-26
boost::geometry::concepts::check用法的测试程序
2019-04-26
宏BOOST_CHECK_EXCEPTION用法的测试程序
2019-04-26
boost::geometry::coordinate_system用法的测试程序
2019-04-26
MyBatis源码分析-6 SecondLevelCache二级缓存及其实现原理
2019-04-26
boost::geometry::coordinate_type用法的测试程序
2019-04-26
MyBatis源码分析-5 Mapper初始化和执行原理
2019-04-26
boost::geometry::geometry_id用法的测试程序
2019-04-26
boost::geometry::radius_type用法的测试程序
2019-04-26