文章目录

  • 前言
  • 数据结构
  • 实现
  • 效果

前言

这个就没啥了,俺是来水博文的~

数据结构

这个银行家算法的原理很简单,我这里就不说了,代码有注释的。

主要是我这里的几个数据结构

就这几个,含义的话和操作系统书上的一样。
整体实现也很简单,就是几个for循环的事情。

实现


import java.util.ArrayList;public class 银行家算法 {//我们假设有5个进程p0,1,2,3,4//有三个资源A,B,C 10 5 7static int[] Resource={10,5,7};static int[][] Claim;static int[][] Allocation;static int[][] Need;static int[] Available;static boolean[] Used;static ArrayList<Integer> Order = new ArrayList<>();public static void Init(){//这是一个初始化方法,负责模拟我们的初始化情况//我们还是来个最直接方法吧Claim=new int[][]{{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};Allocation = new int[][]{{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};Need = new int[5][3];ComNeed();Available = new int[3];ComAvailable();Used = new boolean[5];}public static void ComAvailable(){//计算剩下多少个东西int[] count = new int[3];for (int i = 0; i < Allocation.length; i++) {for (int j = 0; j < Allocation[i].length; j++) {count[j]+=Allocation[i][j];}}for (int i = 0; i < Resource.length; i++) {Available[i] = Resource[i]-count[i];}}public static void ComNeed(){//计算需要的那个Needfor(int i=0;i<Claim.length;i++){for(int j=0;j<Claim[i].length;j++){Need[i][j] = Claim[i][j] - Allocation[i][j];}}}public static void show(){//这个是负责显示我们模拟的这个情况System.out.println(Order.toString());}public static int find(){int index = -1;//负责找到可以给资源的那个进程对应的下标for (int i = 0; i < Need.length; i++) {boolean flag = true;for (int j = 0; j < Need[i].length; j++) {if(Used[i]) continue;if(Need[i][j]>Available[j]){flag=false;break;}if(flag){index = i;return index;}}}return index;}public static void addAvailable(int index){for (int i = 0; i < Available.length; i++) {Available[i] += Need[index][i];}}public static void update(){//负责更新while (true){int ok_run = find();if(ok_run!=-1){Used[ok_run] = true;Order.add(ok_run);addAvailable(ok_run);if(Order.size()==5){System.out.println("执行完毕");show();return;}}else {System.out.println("无法分配");show();return;}}}public static void main(String[] args) {Init();update();}}

效果

银行家算法(操作系统 Java版)相关推荐

  1. 银行家算法(java实现)

    银行家算法(java实现) 算法导入 一.死锁的定义.必要条件 二.死锁的处理方法 三.何为安全状态 算法分析 一.银行家算法中的数据结构 二.银行家算法 三.安全性算法 算法实现 一.基础类 二.方 ...

  2. 经典排序算法(Java版)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 经典排序 ...

  3. 数据结构与算法(Java版) | 本套系列教程的课程亮点和授课方式

    接下来,在这一讲,我会花一点时间同同学们达成一个共识,就是我们这套系列教程在讲述的时候,究竟是以一种什么方式来讲述的.我希望,经过我的讲解之后,大家能够对我们这套系列教程的课程亮点和授课方式达成如下这 ...

  4. 银行家算法回顾[JAVA实现]

    为什么80%的码农都做不了架构师?>>>    分析了一下银行家算法,基于银行家算法做了一个小程序. 银行家算法主要用于操作系统进程管理程序中,用于防止死锁. 接下来这段代码将模拟这 ...

  5. 一致性Hash算法(JAVA版)(摘抄至五月的仓颉的博客)

    一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...

  6. 《数据结构与算法》——Java版

    前言:个人笔记比较潦草,内容也不全面,欢迎大家提出不同意见! 文章目录 Java读取文件 PrintWriter 递归 递归过程 递归工作栈 例:汉诺塔 汉诺塔的代码 第0章 内排序 0.1 插入排序 ...

  7. Twitter的分布式自增ID算法snowflake (Java版)

    概述 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有些时候我们希望能使用一种 ...

  8. 动态规划算法入门---java版

    转载:http://blog.csdn.net/p10010/article/details/50196211 动态规划算法(后附常见动态规划为题及Java代码实现) 一.基本概念 动态规划过程是:每 ...

  9. 迷宫求解 java_迷宫求解算法(java版)

    迷宫求解算法一直是算法学习的经典,实现自然也是多种多样,包括动态规划,递归等实现,这里我们使用穷举求解,加深对栈的理解和应用 定义Position类用于存储坐标点 起点坐标为(1,1),终点坐标为(8 ...

最新文章

  1. 周杰伦300多万NFT被黑客盗走,上链加密艺术就这??
  2. 请求中文乱码_【1】执行Http请求访问网页
  3. 什么可以代替压感笔_什么是优生五项?一般体检可以代替优生五项检查?医生:不可以!...
  4. An Openfire plugin for Webspell sites.
  5. Spring中Bean的作用域都有哪些?
  6. 通过NSNotification来监听键盘弹出和弹回
  7. LeetCode 1417. 重新格式化字符串
  8. ORB论文研读与代码实现
  9. 23-windows下filebeat与logstash与elasticSearch的合并使用
  10. 微课|中学生可以这样学Python(5.6.1节):列表推导式1
  11. Linux系统下的几种终端设备文件
  12. ★LeetCode(942)——增减字符串匹配(JavaScript)
  13. java中notify是什么意思_java中wait,notify,notifyAll是什么?
  14. Vue v-on v-model 组合使用
  15. Log4j具体使用实例
  16. 【网络与系统安全实验】网络与系统安全概述
  17. matlab读取txt文档三行数据库,Matlab中的textread textscan读取文本文件
  18. 完整代码-Vue+Java后台实现省市区三级联动
  19. python切片逆序_python 中倒序切片
  20. 思必达软件督查督办软件技术开发与设计

热门文章

  1. Java学习_getProperty()方法初探
  2. System.getProperty(user.dir) Java获取项目路径
  3. 使用ListBox控件,选中ListBoxItem中的TextBox后,如何改变SelectedItem
  4. 如何把自己的知识、经验、才华高效变现
  5. 小学 计算机竞赛时间,关于举行2020年经开区小学生信息技术基础素养竞赛的通知...
  6. WKWebView常用delegate
  7. 河道采砂实时监测算法 yolov5
  8. 分布式问题,你知道几个?
  9. mycncart 之网银在线chinapay支付方式
  10. 几百字让5000年无人能识的自然数一下子浮出水面推翻百年集论(增补稿)