java子弹集合_Java使用线程并发库模拟弹夹装弹以及发射子弹的过程
packagecn.yw.bore;importjava.util.ArrayList;importjava.util.List;importjava.util.concurrent.ArrayBlockingQueue;importjava.util.concurrent.locks.Condition;importjava.util.concurrent.locks.Lock;importjava.util.concurrent.locks.ReentrantLock;/*** 使用多线程模拟多线程装弹及射出的过程(实际上这是一个生产者与消费者的问题)
*
* 要求:
* 1.开启3个线程装弹,开启2个线程发射子弹
* 2.弹夹最多只能够装载12颗子弹
* 3.一次只能够发射一枚子弹,发射子弹的时候不能进行装弹,在装弹的时候不能进行发射。
* 4.整个过程就是“装载”、“发射”、“装载”、“发射”、“装载”、“发射”
*@authoryw-tony
**/
public classClipTest {public static voidmain(String[] args){final BoreManager manager = newBoreManager();//开启3个线程装弹
for(int i=0;i<3;i++){new Thread(newRunnable(){
@Overridepublic voidrun() {while(true){
manager.loading();
}
}
}).start();
}//开启两个线程进行发射
for(int i=0;i<2;i++){new Thread(newRunnable(){
@Overridepublic voidrun() {while(true){
manager.send();
}
}
}).start();
}
}/*** 模拟装弹以及发射的管理类
*@authoryw-tony
**/
static classBoreManager{int boreCount = 1;boolean flag = false;//线程开启标记//队列中对多存储12个子弹
ArrayBlockingQueue blocking = new ArrayBlockingQueue(12);//List blocking = new ArrayList();
Lock lock = newReentrantLock();
Condition cond1=lock.newCondition();
Condition cond2=lock.newCondition();/*** 发射*/
public voidsend(){
lock.lock();try{if(!flag){
cond1.await();
}if(blocking.size() == 0){
flag= false;
cond2.signal();
}else{
Integer i=blocking.take();
System.out.println("发射第:"+i+"个子弹!");
blocking.remove(i);//将该元素从队列中移除
Thread.sleep(100);//模拟子弹发射的慢过程
}
}catch(Exception e){
e.printStackTrace();
}finally{
lock.unlock();
}
}/*** 装载*/
public voidloading(){
lock.lock();try{if(flag){
cond2.await();
}if(blocking.size()==12){
flag= true;
cond1.signal();
}else{
blocking.put(boreCount);
System.out.println("第:"+boreCount+"个子弹装载完成!");
Thread.sleep(100);//模拟装弹慢过程
boreCount++;
}
}catch(Exception e){
e.printStackTrace();
}finally{
lock.unlock();
}
}
}
}
java子弹集合_Java使用线程并发库模拟弹夹装弹以及发射子弹的过程相关推荐
- Java使用线程并发库模拟弹夹装弹以及发射子弹的过程
同样是从网上看到的一个需求,需求描述都在代码中. 不多说了,直接贴代码了.相信大家都能够看得懂的! package cn.yw.bore;import java.util.ArrayList; imp ...
- 使用Java线程并发库实现两个线程交替打印的线程题
背景:是这样的今天在地铁上浏览了以下网页,看到网上一朋友问了一个多线程的问题.晚上闲着没事就决定把它实现出来. 题目: 1.开启两个线程,一个线程打印A-Z,两一个线程打印1-52的数据. 2.实现交 ...
- Java多线程与线程并发库高级应用笔记
以下内容是学习张老师Java多线程与线程并发库高级应用时所做的笔记,很有用 网络编辑器直接复制Word文档排版有点乱,提供原始文件下载 先看源文件概貌 张孝祥_Java多线程与并发库高级应用 [视频介 ...
- java基础巩固笔记(5)-多线程之线程并发库
2019独角兽企业重金招聘Python工程师标准>>> java基础巩固笔记(5)-多线程之线程并发库 标签: java [TOC] 本文主要概述java.util.concurre ...
- 线程并发库和线程池的作用_线程和并发介绍
线程并发库和线程池的作用 本文是我们名为Java Concurrency Essentials的学院课程的一部分. 在本课程中,您将深入探讨并发的魔力. 将向您介绍并发和并发代码的基础知识,并学习诸如 ...
- Java5线程并发库之LOCK(锁)CONDITION(条件)实现线程同步通信
为什么80%的码农都做不了架构师?>>> Lock(锁)&Condition(条件)实现线程同步通信 接下来介绍,java5线程并发库里面的锁.跟锁有关的类和接口主要是 ...
- 线程并发库和线程池的作用_并发–顺序线程和原始线程
线程并发库和线程池的作用 不久前,我参与了一个项目,该项目的报告流程如下: 用户会要求举报 报告要求将被翻译成较小的部分 基于零件/节的类型的每个零件的报告将由报告生成器生成 组成报告的各个部分将重新 ...
- java 锁_Java之线程并发的各种锁、锁、锁
因为两周没更新了... 也不是懒,这两周确实有些忙,赶项目进度赶的不亦乐乎... 终于赶在工期前,可以进入内测了,我也有了些时间,可以更新啦... 线程并发锁是很常见的问题,而且在Java中锁的类型. ...
- Java多线程(五) —— 线程并发库之锁机制
参考文献: http://www.blogjava.net/xylz/archive/2010/07/08/325587.html 一.Lock与ReentrantLock 前面的章节主要谈谈原子操作 ...
- java多线程面试_Java多线程和并发基础面试问答,看过后你不会后悔
***:Java多线程面试问题 1:进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.Java ...
最新文章
- Linux Shell脚本编程--cut命令
- Codeforces Round #225 (Div. 1) E. Vowels 容斥 + sosdp
- 那些年困扰我们的Linux 的蠕虫、病毒和木马
- MSDN WebCast网站全新改版
- 壁纸图片|2020年12月游戏图片大全
- 独家对话华为王成录:手机 HarmonyOS 开发者 Beta 版将如约而至
- 【C语言】之冒泡排序法(详解)
- 射影几何----二次曲线三角形调和定理的应用,圆锥曲线内接焦点三角形定理的证明【原创】
- 正则判断数字加下划线加数字
- php设为首页代码,JavaScript
- 产出投入表结构类型的介绍
- MYS-6ULX-IOT 开发板测评——支持 RTL8188 WiFi 模块
- java计算机毕业设计高校防疫物资管理系统MyBatis+系统+LW文档+源码+调试部署
- 工作态度-《精要主义》书中的精髓:我们如何践行精要主义,摆脱拥挤不堪的生活?
- csv文件——简单读操作01
- xuelipay 个人即时到账收款平台 原理及源码详解 支持支付宝微信
- 10年+工作经验总结:测试工程师职业成长路线图
- 爬虫urllib。request中各种处理器,构造opener。open(处理登陆验证的,处理cookies的,处理代理设置的)
- 算法——树(10%)
- 蓝牙核心技术介绍(蓝牙协议、架构、硬件和软件笔记)