import java.util.Scanner;public class banker {private int Process = 0; // 定义最大进程数目private int Resource = 0; // 定义最大资源类数private int Work[]; // 定义系统可提供给进程继续运行所需的各类资源数目private int MAX[][]; // 定义进程最大资源需求private int Allocation[][]; // 定义进程当前已用资源数目private int need[][]; // 定义进程需要资源数目private int Request[][]; // 定义进程请求资源向量private boolean finish[];// 定义进程完成标志private int Available[];private int P[];private Scanner in = new Scanner(System.in); // 定义全局输入流public void close() {   in.close();   } // 构造函数,初始化各向量public banker() throws Exception {int i, j;System.out.print("请输入当前进程的个数:");Process = in.nextInt();System.out.print("请输入系统资源种类的类数:");Resource = in.nextInt();   // 初始化各个数组Available = new int[Resource];Work = new int[Resource];MAX = new int[Process][Resource];Allocation = new int[Process][Resource];need = new int[Process][Resource];Request = new int[Process][Resource];finish = new boolean[Process];P = new int[Process];System.out.println("请输入每个进程最大资源需求量,按" + Process + "*" + Resource     + "矩阵输入:");for (i = 0; i < Process; i++) {     System.out.print("请输入P" + (i + 1) + "进程各类资源最大需求量:");for (j = 0; j < Resource; j++)     MAX[i][j] = in.nextInt();   }System.out.println("请输入每个进程已分配的各资源数,也按照" + Process + "*" + Resource     + "矩阵输入:");for (i = 0; i < Process; i++) {     System.out.print("请输入P" + (i + 1) + "进程各类资源已分配 的资源数:");for (j = 0; j < Resource; j++){     Allocation[i][j] = in.nextInt();need[i][j] = MAX[i][j] - Allocation[i][j];if (need[i][j] < 0) {System.out.println("您输入的第" + (i + 1) + " 个进程所拥有的第"         + (j + 1) + "个资源数错误,请重新输入:");j--;continue;     }    }   }System.out.print("请输入系统各类资源可用的数目:");for (i = 0; i < Resource; i++) {    Available[i] = in.nextInt();   }  }public void Bank() throws Exception {int j, i;int tempAvailable[] = new int[Resource];int tempAllocation[] = new int[Resource];int tempNeed[] = new int[Resource];System.out.println("----------------------------------------------------------");System.out.print("请输入要申请资源的进程号(当前共有" + Process+ "个进程,如为进程P1申请,请输入1,以此类推)");i = in.nextInt() - 1;System.out.print("请输入P" + (i + 1) + "进程申请的各资源的数量");for (j = 0; j < Resource; j++){    Request[i][j] = in.nextInt();}for (j = 0; j < Resource; j++){ if (Request[i][j] > need[i][j]){      System.out.println("您输入的申请的资源数超过进程的需求量!请重新输入!");continue;}if (Request[i][j] > Available[j]){      System.out.println("您输入的申请数超过系统可用的资源数!请重新输入!");     continue;}}for (j = 0; j < Resource; j++) {    tempAvailable[j] = Available[j];tempAllocation[j] = Allocation[i][j];tempNeed[j] = need[i][j];Available[j] = Available[j] - Request[i][j];Allocation[i][j] = Allocation[i][j] + Request[i][j];need[i][j] = need[i][j] - Request[i][j];   }if (Safe()) {System.out.println("分配给P" + i + "进程成功!");System.out.print("分配前系统可用资源:");for (int k = 0; k < Resource; k++)System.out.print(tempAvailable[k] + " ");System.out.print("\n分配前进程P" + i + "各类资源已分配数量:");for (int k = 0; k < Resource; k++)System.out.print(tempAllocation[k] + " ");System.out.print("\n分配前进程P" + i + "各类资源需求数量:");for (int k = 0; k < Resource; k++)System.out.print(tempNeed[k] + " ");System.out.print("\n分配后系统可用资源: ");for (int k = 0; k < Resource; k++)System.out.print(Available[k] + " ");System.out.print("\n分配后进程P" + i + "各类资源已分配数量:");for (int k = 0; k < Resource; k++)System.out.print(Allocation[i][k] + " ");System.out.print("\n分配后进程P" + i + "各类资源需求数量:");for (int k = 0; k < Resource; k++)System.out.print(need[i][k] + " ");    System.out.println(); }else {     System.out.println("申请资源失败!");for (j = 0; j < Resource; j++){      Available[j] = Available[j] + Request[i][j];Allocation[i][j] =  Allocation[i][j]  +  Request[i][j];need[i][j] = need[i][j] + Request[i][j];    }   }for (i = 0; i < Process; i++){    finish[i] = false;   }   } // 安全性算法public boolean Safe(){   int i, j, k, t = 0;Work = new int[Resource];for (i = 0; i < Resource; i++)Work[i] = Available[i];for (i = 0; i < Process; i++){    finish[i] = false;   }for (i = 0; i < Process; i++){    if (finish[i] == true){     continue;    } else{      for (j = 0; j < Resource; j++){      if (need[i][j] > Work[j]){       break;}}if (j == Resource){      finish[i] = true;for (k = 0; k < Resource; k++){       Work[k] += Allocation[i][k];}P[t++] = i;i = -1;}else {      continue;}}if (t == Process) {System.out.print("当前系统是安全的,存在一安全序 列:");for (i = 0; i < t; i++){System.out.print("P" + P[i]);if (i != t - 1) {System.out.print("---");      }}System.out.println();     return true;    }}System.out.println("当前系统是不安全的,不存在安全序列");return false;  }public static void main(String[] args) {try {     banker b = new banker();b.Safe();for (int i = 0; i < 200; i++)b.Bank();b.close();   }catch (Exception e) {}}
}

银行家算法java代码相关推荐

  1. 银行家算法JAVA版本

    银行家算法 摘要:银行家算法来源于银行的借贷业务,一定数量的本金要应多个客户的借贷周转,为了防止银行家资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还.在操作系统中研究资源分配策略时也有类似 ...

  2. 基于界面的银行家算法java实现_java实现银行家算法(Swing界面)

    java代码实现了银行家算法,界面写的个人认为还是较为细致的,完整的实现了找安全序列等算法功能,可作为参考学习银行家算法. 直接上代码:①界面展示方法: public void ShowFrame() ...

  3. 【南邮操作系统实验】银行家算法Java版

    这个是南邮通达的操作系统实验,实验内容相对比较简单,就是实现一下银行家算法. 我没有参考任何源码,纯属 made by myself,如果差错,欢迎指出. import java.util.*; /* ...

  4. 计算机操作系统 --- 共享资源分配与银行家算法java篇

    共享资源分配与银行家算法 课程设计的要求 主菜单 添加进程 1.手动输入进程 2.直接文件读入 算法实现 安全性算法 银行家算法 随机分配算法 实现效果 彩蛋 Applicaion.java Proc ...

  5. 操作系统-银行家算法(Java实现)

    一.银行家算法思想 银行家算法是最著名的死锁避免算法,其思想是:将操作系统视为银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款.操作系统按照银行家制定 ...

  6. 算法高级(13)-常见负载均衡算法Java代码实现

    我们在分布式系统常见负载均衡算法中对负载均衡及负载均衡算法进行了介绍,接下来我们用代码对常见的几种算法进行实现. 本文讲述的是"将外部发送来的请求均匀分配到对称结构中的某一台服务器上&quo ...

  7. 冒泡算法java代码实现

    冒泡排序是什么?我们先来看百度百科的介绍 冒泡排序算法的原理如下: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的 ...

  8. 操作系统 | 银行家算法及代码实现

    参考博客 [操作系统]死锁避免之银行家算法_少侠露飞的学习笔记-CSDN博客 [操作系统]避免死锁--银行家算法_明昕ztoy的博客-CSDN博客_银行家算法避免死锁 实现思路 当一个进程申请使用资源 ...

  9. Levenshtein Distance算法JAVA代码与示例图解

    Levenshtein Distance莱文斯坦距离 指的是两个字串之间,由一个转成另一个所需的最少编辑操作次数.允许的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. Leven ...

最新文章

  1. jSearch(聚搜) v1.1.0 发布,全新视觉体验
  2. FE.ENV-manjaro虚拟机配置和常见前端工具安装
  3. 安卓点击图片跳转界面_安卓手机APP控制无线开关的电路方案设计(原理图+源码)...
  4. MyBatis 特殊字符处理
  5. 前端学习(672):if-else
  6. Python使用wordnet工具计算词集与词条基本用法(三)
  7. 腾讯 Github 全球贡献前十;三星可折叠手机售价 1.6 万;OpenTitan 正式开源|极客头条...
  8. 使用proxychains 代理终端
  9. 常用贴片电阻、电容、电感封装
  10. iis运行html提示500错误,IIS发布网站出现Http—500错误
  11. winxp计算机如何连接win7计算机,xp连接win7共享打印机的步骤,xp连接win7共享打印机教程...
  12. 记模拟器出现横竖屏切换闪屏问题
  13. OPENSSL的安装使用
  14. 2021年焊工(初级)考试资料及焊工(初级)复审考试
  15. 京东上什么卖得最好?
  16. 原生HTML:img 相关属性详解(alt属性,onerror事件,以及其他基本属性),css中的object-fit
  17. 给自己看的(摘自他人)
  18. 分分钟拯救监控知识体系
  19. android.telex 涉及技术整理
  20. 大豆技术面分析_技术贴 | GIS三维视域分析—面要素

热门文章

  1. DL之LSTM:基于《wonderland爱丽丝梦游仙境记》小说数据集利用LSTM算法(层加深,基于keras)对单个character字符预测
  2. DataTransmission:免费薅羊毛,Are you kidding me? 镭速传输 “百日计划”提前大曝光!Raysync传输协议要开放?
  3. NLP:基于nltk和jieba库对文本实现提取文本摘要(两种方法实现:top_n_summary和mean_scored_summary)
  4. Dataset之MNIST:自定义函数mnist.load_mnist根据网址下载mnist数据集(四个ubyte.gz格式数据集文件)
  5. ML之RS之CF:基于用户的CF算法—利用大量用户的电影及其评分数据集对一个新用户Jason进行推荐电影+(已知Jason曾观看几十部电影及其评分)
  6. Py之PIL:Python的PIL库的简介、安装、使用方法详细攻略
  7. CV之NS:图像风格迁移(Neural Style 图像风格变换)算法简介、过程思路、关键步骤配图、案例应用之详细攻略
  8. 什么是PyTorch?
  9. java中JVM内存管理(1)
  10. 敲点JavaScript代码