java 先入先出_一道java的基础题:一个线程安全的后进先出队列
要求:编写一个后进先出队列,用于存放整数,实现其线程安全
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的基础题:一个线程安全的后进先出队列相关推荐
- java 一二三四五_五道java小题,补更四道java小题
一:分析以下需求,并用代码实现 1.定义List集合,存入多个字符串 2.删除集合中字符串"def" 3.然后利用迭代器遍历集合元素并输出 import java.util.Arr ...
- 尚学堂java培训_送给 Java 自学者或者初学者的最全知识清单,2020 年 Java 就该这么学...
最近逛知乎,发现有很多想自学 Java 或者 Java 初学者提问,不知道如何学习 Java?我接触 Java 快 8 年的时间了,一直从事 Java 开发工作,自己一直升级打怪,对于如何更好的学习 ...
- aspose.cell for java 去水印_【Java编程基本功】(十)输出杨辉三角,输出*号,数组移动...
不知道,小伙伴们有没有试着去敲一下代码呢其实学习就是这样的,没有捷径可走,要想比别人做的好,唯有比别人更努力.希望都小伙伴们可以坚持的学下去一起加油吧~ 第三十一题 打印出杨辉三角形(要求打印出10行 ...
- java安装_使用Java 9模块化来发布零依赖本机应用程序
java安装 为什么我不能仅构建一个.EXE? 首次引入Java时,主流编程语言大多要么编译成独立的可执行文件(例如C / C ++,COBOL),要么在解释器中运行(例如Perl,Tcl). 对于许 ...
- java书籍_学习Java最好的10本书,从入门到精通
在当代,学习Java等编程课程的主要方式是视频资源,如果你想学,在网上五分钟之内就可以找到一堆学习视频,瞬间将你的硬盘填满.但是这些课程质量良莠不齐,对于小白来说很难辨别好坏. 但是书籍不同,书籍都是 ...
- 易语言 java支持_开源Java客户端可以连接易语言服务器
我们的服务端处理客户端的连接请求是同步进行的, 每次接收到来自客户端的连接请求后, 都要先跟当前的客户端通信完之后才能再处理下一个连接请求. 这在并发比较多的情况下会严重影响程序的性能, 为此,我们可 ...
- java 爬虫_探索Java 多线程爬虫及分布式爬虫架构
在我们调试爬虫程序的时候,单线程爬虫没什么问题,但是当我们在线上环境使用单线程爬虫程序去采集网页时,单线程就暴露出了两个致命的问题: 采集效率特别慢,单线程之间都是串行的,下一个执行动作需要等上一个执 ...
- java编译_解析 Java 即时编译器原理。
↑ 点击上面 "时代Java"关注我们,关注新技术,学习新知识! 一.导读 常见的编译型语言如C++,通常会把代码直接编译成CPU所能理解的机器码来运行.而Java为了实现&quo ...
- 学习java前_学习java之前
原标题: 学习java之前 声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 学习java之前 2.1认识JD ...
- java 示例_最佳Java示例
java 示例 什么是Java? (What is Java?) Java is a programming language developed by Sun Microsystems in 199 ...
最新文章
- Zynq常见内核崩溃
- 深入Java泛型(二):通配符与嵌套
- 获取input数据_使用 PHP Masked Package 屏蔽敏感数据
- eureka之EurekaClientConfig的作用
- Nutch关于robot.txt的处理
- 【python】画一个爱心
- RPC(一)[概述]
- linux运维服务常见故障,linux常见故障处理
- 实验三 密码破解技术 201521410010
- MySQL基础学习特殊篇 入门限定
- 基于昊芯DSC28034+四针OLED屏(保姆级教程)
- 人工智能技术发展现状分析,阿发狗22年最新
- 带你了解什么叫大数据分析
- 如何在Ubuntu 20.04上安装和使用TimescaleDB
- 计算机蓝屏代码0x000000ED,电脑蓝屏代码0x000000ed解决步骤
- jira任务导出excel
- SpringCloud-Alibaba全家桶
- 开源?结缘!Towhee 开源社区与上海人工智能实验室 OpenDataLab 成为开源生态合作伙伴
- 多因素生存分析图绘制
- power linux 安装系统,在Linux系统中安装/使用PowerShell Core 6.0