//package Chapter21.bidsimulation;
//
//import java.util.LinkedList;
//import java.util.PriorityQueue;
//import java.util.Queue;
//import java.util.Random;
//import java.util.concurrent.ArrayBlockingQueue;
//import java.util.concurrent.ExecutorService;
//import java.util.concurrent.Executors;
//import java.util.concurrent.TimeUnit;
//
//// 去银行办事的顾客
//class Customer {
// // 该顾客办理业务需要的时间
// private final int serviceTime;
//
// public Customer(int serviceTime) {
// this.serviceTime = serviceTime;
// }
//
// public int getServiceTime() {
// return serviceTime;
// }
//
// @Override
// public String toString() {
// return "[" + serviceTime + "] ";
// }
//}
//
//// 每个柜台都会排队,这个就模拟用户排队
//class CustomerLine extends ArrayBlockingQueue<Customer> {
// /**
// *
// */
// private static final long serialVersionUID = 7788436315954397218L;
//
// public CustomerLine(int maxSize) {
// super(maxSize);
// }
//
// public String toString() {
// if (this.size() == 0) {
// return "[柜台目前无人办理业务,空闲中...]";
// }
// StringBuilder sb = new StringBuilder();
// for (Customer customer : this) {
// sb.append(customer);
// }
// return sb.toString();
// }
//}
//
///**
// * 模拟来银行办理业务的顾客:<br>
// *
// * 1. 它们来的时间完全随机<br>
// * 2. 顾客会随机选择要排队的柜台(一般都是选择人少的...)<br>
// * 3. 办理业务的时间也是随机
// *
// */
//class CustomerGenerator implements Runnable {
// private CustomerLine customerLine;
// private static Random random = new Random(47);
//
// public CustomerGenerator(CustomerLine customerLine) {
// this.customerLine = customerLine;
// }
//
// @Override
// public void run() {
// try {
// while (!Thread.interrupted()) {
// // 某位顾客来银行办理业务
// TimeUnit.MILLISECONDS.sleep(random.nextInt(300));
// // 在哪个柜台?用多少时间?
// customerLine.put(new Customer(random.nextInt(1000)));
// }
// } catch (InterruptedException e) {
// System.out.println("门坏了,,,,顾客没法来了= =" + e);
// }
// System.out.println("下班,顾客不能再来办理业务了。");
// }
//}
//
///**
// * 出纳员
// *
// */
//class Teller implements Runnable, Comparable<Teller> {
// private static int counter = 0;
// // 出纳员编号通过 counter 来获得,所以 counter 是隐藏的
// private final int id = counter++;
// // 负责的顾客队伍(也就是服务的柜台)
// private CustomerLine customerLine;
// // 记录出纳员服务的顾客数,和后面经理分配活儿有关
// private int customerServed = 0;
// // 出纳员服务柜台的状态。如果出纳员有事,就设置为 false,代表当前柜台不能服务
// private boolean isServingCustomerLine = true;
//
// public Teller(CustomerLine customerLine) {
// this.customerLine = customerLine;
// }
//
// @Override
// public void run() {
// try {
// while (!Thread.interrupted()) {
// // 这个是阻塞的哦
// Customer customer = customerLine.take();
// TimeUnit.MILLISECONDS.sleep(customer.getServiceTime());
// // TODO 这个有疑问,为啥要加同步控制块,没有临界资源啊
// synchronized (this) {
// customerServed++;
// while (isServingCustomerLine == false) {
// wait();
// }
//
// }
// }
// } catch (InterruptedException e) {
// System.out.println(this + "被打断,有其他事情需要处理...");
// }
// System.out.println("出纳员下班了...");
// }
//
// // 出纳员有事情,自己或者有其他紧急任务
// public synchronized void doSomethingElse() {
// customerServed = 0;
// isServingCustomerLine = false;
// }
//
// // 出纳员处理任务完毕,回到工作岗位
// public synchronized void comebackWorking() {
// if (isServingCustomerLine == false) {
// System.out.println(this + "负责的柜台继续提供服务...");
// isServingCustomerLine = true;
// notifyAll(); // 和 wait()遥相呼应
// }
// }
//
// @Override
// public String toString() {
// return "出纳员" + id + " ";
// }
//
// // 经理需要用优先队列安排工作,所以服务人数少的人优先干活(以服务人数不按工作量,呵呵呵)
// public synchronized int compareTo(Teller teller) {
// return this.customerServed - teller.customerServed;
// }
//}
//
//// 虽然实现了 Runnable,但是其实只有一个经理。实现是为了让 ExecutorService 统一管理
//class TellerManager implements Runnable {
//
// // 管理所有的出纳员
// private ExecutorService exec;
// // 同时管理所有的柜台
// private CustomerLine customerLine;
// // 按照服务顾客数目排序,少的分配活儿
// private PriorityQueue<Teller> workingTellers = new PriorityQueue<Teller>();
// // 分配去干其他事情的出纳员
// private Queue<Teller> tellersDoingOtherThings = new LinkedList<Teller>();
// // 调整算法因子
// private int adjustmentPeriod;
//
// public TellerManager(ExecutorService exec, CustomerLine customerLine, int adjustmentPeriod) {
// this.exec = exec;
// this.customerLine = customerLine;
// this.adjustmentPeriod = adjustmentPeriod;
//
// // 经理下面最起码带个人不是。。。
// Teller teller = new Teller(customerLine);
// exec.execute(teller);
// workingTellers.add(teller);
// }
//
// // 经理会根据自己的经验安排工作
// public void adjustTellerNumber() {
// // 如果队伍很长(顾客数目是出纳员数目的2倍多)
// if (customerLine.size() / workingTellers.size() > 2) {
// // 如果有在做其他事情的出纳员,要事优先原则
// if (tellersDoingOtherThings.size() > 0) {
// Teller teller = tellersDoingOtherThings.remove();
// teller.comebackWorking();
// workingTellers.add(teller);
// return;
// }
// // 人确实不够了,通知 hr 赶紧去招人...
// Teller teller = new Teller(customerLine);
// exec.execute(teller);
// workingTellers.add(teller);
// return;
// }
//
// // 队伍很短,不能让出纳员闲着...(老板都是这想法吧= =)
// if (workingTellers.size() > 1 && customerLine.size() / workingTellers.size() < 2) {
// reassignOneTeller();
// }
// // 队伍压根没人,留一个出纳员工作即可,其他都去干别的活儿,不能让出纳员闲着...
// if (customerLine.size() == 0) {
// while (workingTellers.size() > 1) {
// reassignOneTeller();
// }
// }
// }
//
// // 分配出纳员去干别的活儿
// private void reassignOneTeller() {
// Teller teller = workingTellers.poll();
// // poll() 在队列为空的时候返回 null,不用判断 teller为 null 是因为上面肯定留了一个出纳员在 woerkingTellers
// teller.doSomethingElse();
// tellersDoingOtherThings.offer(teller);
// }
//
// @Override
// public void run() {
// try {
// while (!Thread.interrupted()) {
// TimeUnit.MILLISECONDS.sleep(adjustmentPeriod);
// adjustTellerNumber();
// System.
没有合适的资源?快使用搜索试试~ 我知道了~
thinking_in_java-master.zip_Thinking in Java_zip
共280个文件
java:277个
class:1个
md:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 61 浏览量
2022-09-14
23:50:04
上传
评论
收藏 181KB ZIP 举报
温馨提示
thinking_in_java-master.zip
资源推荐
资源详情
资源评论
收起资源包目录
thinking_in_java-master.zip_Thinking in Java_zip (280个子文件)
ShowMethods.class 3KB
.gitignore 121B
BidSimulation.java 9KB
CarBuilder.java 9KB
BankTellerSimulation.java 7KB
_17_VendingMachine.java 5KB
MyExam.java 5KB
SemaphoreDemo.java 5KB
Exam.java 5KB
ToastMatic.java 4KB
CriticalSection.java 4KB
Restaurant.java 3KB
_19_Roshambo1.java 3KB
_08_Food.java 3KB
Fantisy.java 3KB
DeadLockTest.java 3KB
TestBlockingQueues.java 3KB
RestaurantWithBlockingQueue.java 3KB
Exercise05.java 3KB
OrnametalGarden.java 3KB
CyclicBarrierGame.java 2KB
RegisteredFactories.java 2KB
WaxOMatic.java 2KB
_14_CarWash.java 2KB
WhoGoFirst.java 2KB
ExchangerTest.java 2KB
Interrupting.java 2KB
PipedIO.java 2KB
AdaptMethodIdiom.java 2KB
FastSimulation.java 2KB
_20_RoShamBo2.java 2KB
_05_Reflection.java 2KB
IntererptingIdiom.java 2KB
ClassInitialization.java 2KB
_03_CoffeeGenerator.java 2KB
FileClassLoader.java 2KB
PriorityQueueDemo.java 2KB
CaptureUncaughtException.java 2KB
_22_GenericArray2.java 2KB
NotifyVSNotifyAll.java 2KB
NIOinterruption.java 2KB
TestParcel.java 2KB
Philosopher.java 2KB
StormyInning.java 1KB
_11_EnumMaps.java 1KB
AttemptLocking.java 1KB
_08_ExplicitTypeSpecification.java 1KB
Factories.java 1KB
Interrupting2.java 1KB
ShowMethods.java 1KB
_21_RoShamBo3.java 1KB
MacPro.java 1KB
UsingCommand.java 1KB
_01_EnumClass.java 1KB
_23_RoShamBo5.java 1KB
_25_EnumSets.java 1KB
Sequence.java 1KB
_14_FilledListMaker.java 1KB
Apply.java 1KB
VersionTwo.java 1KB
VersionOne.java 1KB
_16_Input.java 1KB
CallableDemo.java 1KB
SelectingMethods.java 1KB
CollectionSequence.java 1KB
ToyTest.java 1KB
DeadlockingDiningPhilosophers.java 1KB
HiddenImplementation.java 1KB
CADSystem.java 1KB
IloveGame.java 1KB
_02_OzWitch.java 1KB
EqualValence2.java 1KB
StaticInitialization.java 1KB
RandomGame.java 1KB
Rethrowing.java 1KB
_01_LinkedStack.java 1KB
NonCollectionSequence.java 1KB
ThreadLocalTest.java 1KB
VersionThree.java 1KB
Flower.java 1KB
_11_Manipulation.java 1KB
InterfaceVSIterator.java 1KB
_16_Erased.java 1KB
_22_RoShamBo4.java 1KB
Joining.java 1KB
Detergent.java 1KB
SimpleDynamicProxy.java 1KB
Tester.java 1012B
Adventure.java 1008B
Music.java 1002B
RandomWords.java 1002B
EvenChecker.java 1000B
TestCompare.java 1000B
AsListInference.java 999B
_06_UpcastEnum.java 968B
FamilyVsExactType.java 960B
_04_SwitchEnum.java 951B
FinalDate.java 948B
_10_SecurityCategory.java 943B
SimpleProxyDemo.java 935B
共 280 条
- 1
- 2
- 3
资源评论
JaniceLu
- 粉丝: 78
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 农村信用社联合社计算机信息系统投产与变更管理办.docx
- 农村信用社联合社计算机信息系统数据管理办法.docx
- 利用SPSS作临床效度分析线上计算网站介绍-医学研究部统计谘.(医学PPT课件).ppt
- 利用Zabbix监控mysqldump定时备份数据库状态.docx
- 利用计算机解决问题的基本过程.doc
- 化工铁路通信工程总结.doc
- 北京大学网络教育软件工程作业.docx
- 医药公司(连锁店)计算机操作规程未新系统的自行按照旧制修改-新系统过制的编号加修模版.doc
- 医药公司(连锁店)计算机系统操作规程模版.doc
- 医药连锁门店计算机系统的操作和管理程序未新系统的自行按照旧制修改-新系统过制的编号加修模版.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功