当前位置: 首页 > news >正文

哪家手机网站建设网站cmd做路由分析

哪家手机网站建设,网站cmd做路由分析,400选号网站源码,网站建设做网站需要多少钱?文章目录 1. 什么是堵塞队列?2. 堵塞队列的方法3. 生产者消费者模型4. 自己实现堵塞队列 1. 什么是堵塞队列? 堵塞队列也是队列,故遵循先进先出的原则。但堵塞队列是一种线程安全的数据结构,可以避免线程安全问题,当队…

文章目录

    • 1. 什么是堵塞队列?
    • 2. 堵塞队列的方法
    • 3. 生产者消费者模型
    • 4. 自己实现堵塞队列

1. 什么是堵塞队列?

堵塞队列也是队列,故遵循先进先出的原则。但堵塞队列是一种线程安全的数据结构,可以避免线程安全问题,当队列为空时,继续出队列会发生堵塞,直至其他线程有元素进队列。当队列满时,继续入队列会堵塞,直至其他线程有元素出队列。
生产者消费者模型就是最经典的堵塞队列模型之一。

2. 堵塞队列的方法

Java标准库里含有堵塞队列,我们使用时可以直接使用标准库即可。

  • BlockingQueue是个接口,真正实现的类是:LinkedBlockingQueue。
  • put方法入队列,take方法出队列,具有堵塞性。
  • peek,offer,poll等方法也可以使用,但是不具有堵塞性。
BlockingQueue<Integer> queue = new LinkedBlockingQueue<>();
queue.put();
queue.take();

3. 生产者消费者模型

这是一个常见的并发编程模型,用于协调生产者和消费者之间的工作,在这个模型中,一个线程负责生产元素,一个线程负责消费元素。
它也是一个堵塞队列 ,所以具有堵塞队列的特性。

public class Test {public static void main(String[] args) {BlockingQueue<Integer> queue = new LinkedBlockingQueue<>();//t1线程负责生产元素Thread t1 = new Thread(() -> {try{Random random = new Random();while (true){int i = random.nextInt();System.out.println("生产元素: " + i);queue.put(i);Thread.sleep(1000);}}catch (InterruptedException e){e.printStackTrace();}});//t2负责消费元素Thread t2 = new Thread(() -> {try {while(true){int i = queue.take();System.out.println("消费元素: " + i);}} catch (InterruptedException e) {e.printStackTrace();}});t1.start();t2.start();}
}

运行结果:
1

4. 自己实现堵塞队列

自己实现堵塞队列需要满足:

  • 通过循环队列来实现;
  • 使用synchronized实现加锁,进行同步;
  • put 插入元素的时候, 判定如果队列满了, 就进行 wait. (注意, 要在循环中进行 wait. 被唤醒时不一定队列就不满了, 因为同时可能是唤醒了多个线程);
  • take 取出元素的时候, 判定如果队列为空, 就进行 wait. (也是循环 wait) ;
class BlockingQueue{//定义一个数组private int[] arr;//数组中元素个数private int size = 0;//记录数组头的位置private int read = 0;//记录尾的位置private int tail = 0;//锁Object lock = new Object();//构造方法,确定数组大小public BlockingQueue(int i){arr = new int[i];}//入队列public void put(int value){try{//加锁,保证线程安全synchronized (lock){//使用while,不要使用if,否则notifyAll时,所有等待线程都被唤醒,造成线程安全while(arr.length == size){lock.wait();}arr[tail] = value;//循环队列tail = (tail + 1) % arr.length;//添加一个元素,size加一次size++;//唤醒所有线程lock.notifyAll();}}catch (InterruptedException e){e.printStackTrace();}}public int take() {//返回值,不能写在try里面int value = 0;try {//上锁synchronized (lock) {//队列为0,等待,使用whilewhile (size == 0) {lock.wait();}//赋返回值value = arr[read];//循环read = (read + 1) % arr.length;//出队列一个,减一个size--;//唤醒lock.notifyAll();}} catch (InterruptedException e) {e.printStackTrace();}//返回值return value;}}
public class Test4 {public static void main(String[] args) throws InterruptedException {BlockingQueue queue = new BlockingQueue(10);Thread t1 = new Thread(() -> {try{Random random = new Random();while (true){int value = random.nextInt(100);System.out.println("生产元素: " + value);queue.put(value);Thread.sleep(100);}}catch (InterruptedException e){e.printStackTrace();}});//t2负责消费元素Thread t2 = new Thread(() -> {while(true){int value = queue.take();System.out.println("消费元素: " + value);}});t1.start();Thread.sleep(2000);t2.start();}
}

1111
1 因为t2 未启动,所以只能生产元素,当生产10个元素后,队列满了,进入堵塞,等待被唤醒;
2 因为t1生产时,每次都会休眠,线程执行非常迅速,所以队列一直出元素,直到队列为空,进入堵塞,等待被唤醒;
3生产一个元素消费一个元素。

http://www.yayakq.cn/news/287645/

相关文章:

  • 做网站需要下载啥pis粉丝做的网站
  • 免费试用网站制作响应式 购物网站模板
  • 济南 制作网站 公司什么网站做招聘效果好
  • 临沂兰山网站建设广州建设网站专家
  • 威海市环翠区建设局网站专业网站建设知识
  • 口碑好的昆明网站建设网络优化方案案例
  • 河南网站制作公司哪家好群晖部署wordpress
  • 绵竹移动网站建设彩票网站建设维护
  • php开源企业网站系统建设家居网站
  • 仿历史网站模板江西住房和城乡建设厅网站
  • 长春网站建设q.479185700惠怎么自己创建一个网页
  • 英文 edm营销 的网站 与 工具东莞网站建设对比
  • 富通建设有限公司网站用html做女装网站
  • 龙元建设网站网站更换图片之类的怎么做
  • 推荐一个做淘客网站做网站使网页不居中
  • 安阳网站建设策划开发公司工程部技术负责人职责
  • 微网站开发平台 知乎wordpress添加海报生成功能
  • 珠海网站建设公自己做的网站怎么让别人看到
  • qwins是哪个网站做的大连建设网站制作
  • 网站建设开题报告书在线购物网站 项目
  • wordpress头部警告错误企业网站seo推广
  • 代做吧机械网站深圳的seo网站排名优化
  • 蚂蚁建站中国工程建设信息网官网查询
  • 编程网站开发培训广州短视频网站开发
  • 网站如何做收款二维码桂平网站建设
  • 网上商城网站怎么做沈阳app制作
  • 网站开发重点难点分析做301到别人网站
  • 网站设计主页网站主页设计费用
  • 海口网站建设美丽网站空间换了 使用原有域名
  • 网站开发进度婚纱摄影网站的设计思路