博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java语言实现银行家算法
阅读量:3897 次
发布时间:2019-05-23

本文共 3783 字,大约阅读时间需要 12 分钟。

在王道操作系统复习上学习了银行家算法

自己简单地实现了一下
资源类:

public class Resources {
//可用各资源数量 private int A; private int B; private int C; public Resources(int a, int b, int c) {
A = a; B = b; C = c; } public int getA() {
return A; } public void setA(int a) {
A = a; } public int getB() {
return B; } public void setB(int b) {
B = b; } public int getC() {
return C; } public void setC(int c) {
C = c; } public synchronized void update(int a,int b,int c){
setA(this.A+a); setB(this.B+b); setC(this.C+c); //System.out.println("当前可用资源数:A:"+A+",B:"+B+",C:"+C); }}

线程1:

public class P0 extends Thread{
private Resources resources; //需要各类资源的最大值 private int maxA; private int maxB; private int maxC; //已分配各类资源个数 private int alloA; private int alloB; private int alloC; //需要各资源的个数 private int needA; private int needB; private int needC; //构造方法 public P0(int maxA, int maxB, int maxC, int alloA, int alloB, int alloC,Resources resources) {
this.maxA = maxA; this.maxB = maxB; this.maxC = maxC; this.alloA = alloA; this.alloB = alloB; this.alloC = alloC; needA=maxA-alloA; needB=maxB-alloB; needC=maxC-alloC; this.resources=resources; } @Override public void run() {
System.out.println("P0需要资源个数分别为:A:"+needA+",B:"+needB+",C:"+needC); try {
Thread.sleep(200); } catch (InterruptedException e) {
e.printStackTrace(); } while (true){
if(resources.getA()>=needA&&resources.getB()>=needB&&resources.getC()>=needC){
System.out.println("P0执行完毕,归还资源"); resources.update(alloA,alloB,alloC); break; } } }}

线程2:

public class P1 extends Thread{
private Resources resources; //需要各类资源的最大值 private int maxA; private int maxB; private int maxC; //已分配各类资源个数 private int alloA; private int alloB; private int alloC; //需要各资源的个数 private int needA; private int needB; private int needC; //构造方法 public P1(int maxA, int maxB, int maxC, int alloA, int alloB, int alloC, Resources resources) {
this.maxA = maxA; this.maxB = maxB; this.maxC = maxC; this.alloA = alloA; this.alloB = alloB; this.alloC = alloC; needA=maxA-alloA; needB=maxB-alloB; needC=maxC-alloC; this.resources=resources; } @Override public void run() {
System.out.println("P1需要资源个数分别为:A:"+needA+",B:"+needB+",C:"+needC); try {
Thread.sleep(200); } catch (InterruptedException e) {
e.printStackTrace(); } while (true){
if(resources.getA()>=needA&&resources.getB()>=needB&&resources.getC()>=needC){
System.out.println("P1执行完毕,归还资源"); resources.update(alloA,alloB,alloC); break; } } }}

其余都大同小异

测试类:

public class Test {
public static void main(String[] args) {
Resources resources=new Resources(3,3,2); P0 p0=new P0(7,5,3,0,1,0,resources); P1 p1=new P1(3,2,2,2,0,0,resources); P2 p2=new P2(9,0,2,3,0,2,resources); P3 p3=new P3(2,2,2,2,1,1,resources); P4 p4=new P4(4,3,3,0,0,2,resources); p0.start(); p1.start(); p2.start(); p3.start(); p4.start(); }}

运行结果:

P0需要资源个数分别为:A:7,B:4,C:3P3需要资源个数分别为:A:0,B:1,C:1P4需要资源个数分别为:A:4,B:3,C:1P2需要资源个数分别为:A:6,B:0,C:0P1需要资源个数分别为:A:1,B:2,C:2P1执行完毕,归还资源P3执行完毕,归还资源P2执行完毕,归还资源P0执行完毕,归还资源P4执行完毕,归还资源

转载地址:http://uhyen.baihongyu.com/

你可能感兴趣的文章
SAP HANA关于触发器的深入理解
查看>>
CSDN要求必须绑定手机号
查看>>
SAP HANA查看某一用户最后登录时间及无效连接次数
查看>>
讲讲BW/4 HANA和BW on HANA的区别
查看>>
SAP HANA CREATE SCHEMA
查看>>
SAP HANA CREATE TABLE
查看>>
SAP HANA CREATE USER
查看>>
SAP HANA index type
查看>>
SAP HANA SQL GROUP BY / ORDER BY / OVER / CASE
查看>>
gethostbyname和gethostbyaddr的用法
查看>>
IPv6和IPv4之间的通信机制和方法
查看>>
用syslog记录UNIX日志
查看>>
syslog(),openlog(),closelog()
查看>>
Ubuntu安装后的一些配置
查看>>
ubuntu9.10 tftp服务设置(这个绝对好使)
查看>>
关于UNIXDOMAIN协议的接收发送者验证
查看>>
I/O操作上设置超时之alarm闹钟法
查看>>
查看返回接收到UDP数据包的宿地址结构--(适用于LINUX和BSD系统)
查看>>
如何开启_GNU_SOURCE宏
查看>>
从网上搜索到的一些关于pcap源代码,入门级的
查看>>