千家信息网

如何使用java实现简单银行家算法

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍了如何使用java实现简单银行家算法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下题目:初始时,Alloc
千家信息网最后更新 2026年11月02日如何使用java实现简单银行家算法

这篇文章主要介绍了如何使用java实现简单银行家算法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

具体内容如下

题目:

初始时,Allocate[i,j]=0,表示初始时没有进程得到任何资源。假定进程对资源的请求序列为:

Request(1)[M]=(1,0,0);Request(2)[M]=(2,1,0);Request(2)[M]=(2,0,1);Request(3)[M]=(2,1,1);Request(4)[M]=(0,0,2);Request(2)[M]=(1,0,1);Request(1)[M]=(1,0,1);

请用 Banker 算法判断每一次资源请求是否接受,如果接受请求,请给出请求接受后的资源分配状态,即 Allocate 矩阵、Need 矩阵和 Available 向量。

大致思路:

(1):判断该进程资源请求是否小于Need需求矩阵,小于则进第二步(2):判断该进程资源请求向量是否小于剩余资源向量Available,小于则进入第三步(3):备份下资源状态矩阵,假设接收该需求,求出相应的资源状态矩阵,需求矩阵,剩余资源向量(4):判断接收请求后的状态是否是安全状态A:初始该状态下的进程标识都为false,work为资源剩余向量B;循环该状态下的进程,如果满足标识为false,并且该进程的需求向量小于work 则进入C,当循环完毕都没有满足条件的进入D。C:work+Allocate(对应进程的状态),将该进程对应的进程状态标识为true,将B的循环数变为0,从头开始循环(进入B)D:循环遍历该状态下的进程标识,如果都为true则判断状态安全,否则判断状态不安全(5):如果状态是安全的输入该状态下的各个矩阵与向量,如果不安全,则利用刚刚备份的资源状态矩阵,回滚。

源代码

package Banker;public class Banker { public static int N = 4;// 线程个数 public static int M = 3;// 资源个数 public static int[] Resource = { 9, 3, 6 };// 资源向量; public static int[][] Cliam = { { 3, 2, 2 }, { 6, 1, 3 }, { 3, 1, 4 }, { 4, 2, 2 } }; public static int[][] Allocate = new int[N][M]; public static int[][] Need = { { 3, 2, 2 }, { 6, 1, 3 }, { 3, 1, 4 }, { 4, 2, 2 } }; public static int[] Available = { 9, 3, 6 }; public int[][] state = new int[N][M];   public static void main(String args[]) { Banker ban = new Banker(); //请求序列数组,包含第几个请求,那条进程,请求资源向量。 int[][][] re={{{1},{1,0,0}},{{2},{2,1,0}},{{2},{2,0,1}},{{3},{2,1,1}},{{4},{0,0,2}},{{2},{1,0,1}},{{1},{1,0,1}}}; for(int j=0;jwork[k]) {   return false;  }  }  return true;//返回状态 }  // 判断该进程请求向量是否小于请求矩阵中对应的向量请求资源 public boolean judgementrequest(int[] Request, int i) {  for (int j = 0; j < M; j++) {  if (Request[j] > Need[i][j]) {  return false;  } }  return true; } // 判断该进程请求向量是否小于剩于资源向量 public boolean judgementAvali(int[] Request) { for (int j = 0; j < M; j++) {  if (Request[j] >Available[j]) {  return false;  } } return true; } // 假设分配后修改资源分配矩阵 public int[][] addrequest(int[][] Allocate, int[] Request, int i) { for (int h = 0; h < M; h++) {  Allocate[i][h] = Allocate[i][h] + Request[h]; } return Allocate; } // 假设分配后修改资源的需求矩阵 public int[][] reducerequest(int[][] Need, int[][] state) { for (int j = 0; j < N; j++) {  for (int h = 0; h < M; h++) {  Need[j][h] = Cliam[j][h] - state[j][h];  } } return Need; } // 假设分配后修改资源剩余矩阵 public int[] AvaileReduceRequest(int[] Available, int[][] Allocate) { Available = yiweicopy(Available, Resource); for (int j = 0; j < N; j++) {  for (int h = 0; h < M; h++) {  Available[h] = Available[h] - Allocate[j][h];  } } return Available; }  // 二维数组拷贝 public int[][] erWeiCopy(int[][] x1, int[][] y1) { for (int j = 0; j < N; j++) {  for (int h = 0; h < M; h++) {  x1[j][h] = y1[j][h];  } } return x1; } // 一维数组拷贝 public int[] yiweicopy(int[] x1, int[] y1) { for (int j = 0; j < M; j++) {  x1[j] = y1[j]; } return x1; } // 打印向量 public static void PrintXianglaing(String id, int[] x) { System.out.println(id); for (int j = 0; j < x.length; j++) {  System.out.print(x[j] + " "); } System.out.println(""); } // 打印矩阵 public static void printJuzhen(String id, int[][] y) { System.out.println(id); for (int j = 0; j < N; j++) {  for (int h = 0; h < M; h++) {  System.out.print(y[j][h] + " ");  }  System.out.println(); } }}

感谢你能够认真阅读完这篇文章,希望小编分享的"如何使用java实现简单银行家算法"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

资源 进程 状态 向量 矩阵 分配 剩余 标识 安全 需求 j++ 循环 函数 数组 篇文章 资源分配 算法 银行 银行家 个数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 互联网金融监管科技数据 涨乐互联网科技 互联网 科技公司 世界互联网领先科技成果 深圳齐家互联网科技 碳银互联网科技有限公司 互联网科技股午盘股票涨跌 西藏七维空间互联网科技有限公司 互联网还是高科技吗 智腾互联网科技有限公司 国大互联网教育科技有限公司工作 上海科技产业互联网平台 黑科技 体验场景 互联网大会 广州千川互联网科技有限公司 互联网科技快讯热点 互联网科技包装股 西安有哪些互联网高科技企业 抖集互联网科技技术咨询 互联网科技创业有什么好项目 互联网科技公司华为 互联网科技公司名称 互联网科技公司需要的职位 开一家科技互联网公司需要多少钱 山东子淼互联网科技有限公司 沐思想互联网科技有限公司 卡尔迅互联网科技有限公司 互联网科技包装股份有限公司上市 科技和互联网行业的特点 优雇互联网科技有限公司
0