黑马程序员技术交流社区
标题:
自己写的银行调度代码
[打印本页]
作者:
你为谁归来
时间:
2014-5-8 00:26
标题:
自己写的银行调度代码
代码可以运行,也达到了我想要的结果,但是偶尔会出现角标越界异常,找了好久都没发现问题。一来分享下自己写的代码,二来还可以找高手给看下,那里出的问题。不是每次都会出现异常的,只是偶尔,可能是同步的问题,但是不知道问题出在了那里?
import java.util.*;
public class Bank
{
public static void main(String[] args)
{
new Thread(new Number(1000)).start();//开启调用随机生成人员的线程
for(int i = 1 ;i<=10;i++)//开启10个窗口的线程
{
new Thread(new Monitor(i)).start();
}
}
}
class Monitor implements Runnable
{
public int y1;
public Monitor(int y1)
{
this.y1=y1;
}
public synchronized void sop()
{
if (Number.al1.size() > 0)
{
Number.al1.remove(0);//移除集合的第一个元素,表示处理好一个客户
System.out.println("第" + y1 + "窗口处理了一个普通客户");
try
{
Thread.sleep((new Random().nextInt(10)+1)*100);//处理一个客户用的时间随机取值
} catch (Exception e)
{
e.printStackTrace();
}
}
}
public void run()
{
while (true)
{
if (y1 >= 1 && y1 <= 6)
{
sop();
} else if (y1 == 7)
{
if (Number.al2.size() > 0)
{
Number.al2.remove(0);
System.out.println("第" + y1 + "窗口处理了一个VIP客户");
try
{
Thread.sleep((new Random().nextInt(10)+1)*100);
//处理一个客户用的时间随机取值
} catch (Exception e)
{
e.printStackTrace();
}
} else
{
sop();
}
} else
{
if (Number.al3.size() > 0)
{
Number.al3.remove(0);
System.out.println("第" + y1 + "窗口处理了一个快速客户");
try
{
Thread.sleep((new Random().nextInt(10)+1)*100);
//处理一个客户用的时间随机取值
} catch (Exception e)
{
e.printStackTrace();
}
} else
{
sop();
}
}
try
{
Thread.sleep((new Random().nextInt(10)+1)*100);
} catch (Exception e)
{
e.printStackTrace();
}
}
}
}
class Number implements Runnable
{
public int x;
public int o1;
public int o2=1;
public static int uuu=1;
public static ArrayList<String> al1,al2,al3;
public Number(int o1)//构造函数用于生成3个集合保存3种客户
{
this.o1=o1;
al1 = new ArrayList<String>();
al2 = new ArrayList<String>();
al3 = new ArrayList<String>();
}
public void run()
{
Randomgeneration();
}
public void Randomgeneration()
{
while(o2<=o1)
{
x = (int) (Math.random() * 10 + 1);//随机生成1-10用于判断来的人员是什么客户
Judge(x);
try
{
Thread.sleep((new Random().nextInt(10)+1)*100);
//这个时间要注意下,随机生成人员来的时间
} catch (Exception e)
{
e.printStackTrace();
}
o2++;//人员截至条件
}
}
public void Judge(int y)
{
if(y>=1&&y<=6)
{
al1.add("people");
System.out.println("第"+uuu+++"号来了一个普通客户");
//在普通客户的数组进行添加1个人员
}else if(y==7)
{
al2.add("people");
System.out.println("第"+uuu+++"号来了一个VIP客户");
//在VIP客户的数组进行添加1个人员
}else
{
al3.add("people");
System.out.println("第"+uuu+++"号来了一个快速客户");
//在快速客户的数组进行添加1个人员
}
}
}
复制代码
作者:
NewDemo
时间:
2014-5-8 00:59
mark一下,占个楼
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2