要求:编写一个后进先出队列,用于存放整数,实现其线程安全

1、队列代码:

public class Queue {

int max = 1000;

int[] queue = new int[max];

int cusor = -1;

public synchronized Integer get() {

while (cusor < 0) {

//返回出错

try {

System.out.println("get wait");

wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

--cusor;

int data = queue[cusor + 1];

notifyAll();

return data;

}

public synchronized int put(int data) {

while (cusor >= max - 1) {

//返回出错

try {

System.out.println("put wait");

wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

++cusor;

queue[cusor] = data;

notifyAll();

return data;

}

}

2、测试代码:

public class Producer extends Thread {

Queue queue;

public Producer(Queue queue) {

this.queue = queue;

}

@Override

public void run() {

for (int i = 0; i < 100000; i++) {

System.out.println("put " + queue.put(i));

}

}

}

class Consumer extends Thread {

Queue queue;

public Consumer(Queue queue) {

this.queue = queue;

}

@Override

public void run() {

for (int i = 0; i < 100000; i++) {

System.out.println("get " + queue.get());

}

}

}

class PCTest {

public static void main(String[] args) {

Queue queue1 = new Queue();

Producer producer = new Producer(queue1);

Consumer consumer = new Consumer(queue1);

producer.start();

consumer.start();

}

}

java 先入先出_一道java的基础题:一个线程安全的后进先出队列相关推荐

  1. java 一二三四五_五道java小题,补更四道java小题

    一:分析以下需求,并用代码实现 1.定义List集合,存入多个字符串 2.删除集合中字符串"def" 3.然后利用迭代器遍历集合元素并输出 import java.util.Arr ...

  2. 尚学堂java培训_送给 Java 自学者或者初学者的最全知识清单,2020 年 Java 就该这么学...

    最近逛知乎,发现有很多想自学 Java 或者 Java 初学者提问,不知道如何学习 Java?我接触 Java 快 8 年的时间了,一直从事 Java 开发工作,自己一直升级打怪,对于如何更好的学习 ...

  3. aspose.cell for java 去水印_【Java编程基本功】(十)输出杨辉三角,输出*号,数组移动...

    不知道,小伙伴们有没有试着去敲一下代码呢其实学习就是这样的,没有捷径可走,要想比别人做的好,唯有比别人更努力.希望都小伙伴们可以坚持的学下去一起加油吧~ 第三十一题 打印出杨辉三角形(要求打印出10行 ...

  4. java安装_使用Java 9模块化来发布零依赖本机应用程序

    java安装 为什么我不能仅构建一个.EXE? 首次引入Java时,主流编程语言大多要么编译成独立的可执行文件(例如C / C ++,COBOL),要么在解释器中运行(例如Perl,Tcl). 对于许 ...

  5. java书籍_学习Java最好的10本书,从入门到精通

    在当代,学习Java等编程课程的主要方式是视频资源,如果你想学,在网上五分钟之内就可以找到一堆学习视频,瞬间将你的硬盘填满.但是这些课程质量良莠不齐,对于小白来说很难辨别好坏. 但是书籍不同,书籍都是 ...

  6. 易语言 java支持_开源Java客户端可以连接易语言服务器

    我们的服务端处理客户端的连接请求是同步进行的, 每次接收到来自客户端的连接请求后, 都要先跟当前的客户端通信完之后才能再处理下一个连接请求. 这在并发比较多的情况下会严重影响程序的性能, 为此,我们可 ...

  7. java 爬虫_探索Java 多线程爬虫及分布式爬虫架构

    在我们调试爬虫程序的时候,单线程爬虫没什么问题,但是当我们在线上环境使用单线程爬虫程序去采集网页时,单线程就暴露出了两个致命的问题: 采集效率特别慢,单线程之间都是串行的,下一个执行动作需要等上一个执 ...

  8. java编译_解析 Java 即时编译器原理。

    ↑ 点击上面 "时代Java"关注我们,关注新技术,学习新知识! 一.导读 常见的编译型语言如C++,通常会把代码直接编译成CPU所能理解的机器码来运行.而Java为了实现&quo ...

  9. 学习java前_学习java之前

    原标题: 学习java之前 声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 学习java之前 2.1认识JD ...

  10. java 示例_最佳Java示例

    java 示例 什么是Java? (What is Java?) Java is a programming language developed by Sun Microsystems in 199 ...

最新文章

  1. Zynq常见内核崩溃
  2. 深入Java泛型(二):通配符与嵌套
  3. 获取input数据_使用 PHP Masked Package 屏蔽敏感数据
  4. eureka之EurekaClientConfig的作用
  5. Nutch关于robot.txt的处理
  6. 【python】画一个爱心
  7. RPC(一)[概述]
  8. linux运维服务常见故障,linux常见故障处理
  9. 实验三 密码破解技术 201521410010
  10. MySQL基础学习特殊篇 入门限定
  11. 基于昊芯DSC28034+四针OLED屏(保姆级教程)
  12. 人工智能技术发展现状分析,阿发狗22年最新
  13. 带你了解什么叫大数据分析
  14. 如何在Ubuntu 20.04上安装和使用TimescaleDB
  15. 计算机蓝屏代码0x000000ED,电脑蓝屏代码0x000000ed解决步骤
  16. jira任务导出excel
  17. SpringCloud-Alibaba全家桶
  18. 开源?结缘!Towhee 开源社区与上海人工智能实验室 OpenDataLab 成为开源生态合作伙伴
  19. 多因素生存分析图绘制
  20. power linux 安装系统,在Linux系统中安装/使用PowerShell Core 6.0

热门文章

  1. 【题解】「THUPC 2017」体育成绩统计 / Score
  2. [bzoj2959][动态树]长跑
  3. C语言中access/_access函数的使用
  4. 解压文件时,系统找不到指定路径
  5. PS教程 | 美女面部剥落碎片效果
  6. origin柱状图显示具体数据值
  7. 微信小程序显示圆形图片
  8. vue项目引用QRCode生成二维码扫码实现app登录
  9. IP 伪装简易使用说明
  10. dell latitude3400 笔记本QQ语音别人听不到声音