---------------------- android培训、java培训、期待与您交流!
今天早上开始看项目的要求,然后早上的时间几乎都用来整理思路了,然后下午开始写,写的时间就一个多小时吧,比整理思路的时间还少。再一次证明了,做一个项目,全局观念很重要,不能像以前一样想到一点写一点,然后不对了再去改。但是经过今天的实践,还有没有做到位的地方,就是整理思路的时候还有点混乱,没有做到十分明确代码的构造,导致在做的过程中有点重复代码的产生。。。。下面上代码:
package com.back;
import java.util.LinkedList;
import java.util.Timer;
import java.util.TimerTask;
/*
* 客户生成的类,按照要求产生随机数,来增加客户,并按类别把客户存在链表的集合里
*/
public class Member extends Thread {
public static int number=1;
private LinkedList<Integer> simpList=new LinkedList();//存放普通客户
private LinkedList<Integer> VipList=new LinkedList();//存放Vip用户
private LinkedList<Integer> quickList=new LinkedList();//存放快速用户
private Member(){};
static Member mb=new Member();
public static Member getInstance(){
return mb;
}
/*
* 按要求生成随机数来模拟用户
*/
public int init(){
double r = Math.random();
if(r<=0.1) return 1;//1代表Vip用户
else if(r>0.1&&r<=0.4) return 2;//2代表快速用户
else return 3;//3代表普通用户
}
public synchronized void run(){
Timer t=new Timer();
t.schedule(new TimerTask(){
public void run(){
int a=init();//读取随机生成的用户,并储存在相应的集合里
if(a==1) VipList.add(number);
else if(a==2) quickList.add(number);
else simpList.add(number);
number++;
}
}, 1,1000);
}
/*
* 集合的调用 用于在窗口中获取用户
*/
public LinkedList<Integer> getsimpList(){
return this.simpList;
}
public LinkedList<Integer> getVipList(){
return this.VipList;
}
public LinkedList<Integer> getquickList(){
return this.quickList;
}
public void changeList(LinkedList ls){
ls.remove(0);
}
}
package com.back;
import java.util.LinkedList;
import java.util.Timer;
import java.util.TimerTask;
public class SimpWindow extends Thread {
private int number;//窗口号
public SimpWindow(){};
public SimpWindow(int number){
this.number=number;
}
public void run(){
/*
* 通过定时器来实现窗口持续工作
*/
Timer t=new Timer();
t.schedule(new TimerTask(){
public void run(){
double r = Math.random();//随机生成处理时间
int a=(int) (r*10);
if(a==0) a+=1;
Member mb=Member.getInstance();
synchronized(mb.getsimpList().getFirst()){
LinkedList ls=mb.getsimpList();
int len=ls.size();
if(len>1){
int m=mb.getsimpList().getFirst();
mb.getsimpList().removeFirst();
System.out.println("请"+m+"号用户到"+number+"号窗口"+",预计耗时"+a+"秒");
try {
Thread.sleep(a*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(number+"号窗口办理结束");
}
else System.out.println("暂时没有普通用户排队");
}
}
}, 5000,6000);
}
}
package com.back;
import java.util.LinkedList;
import java.util.Timer;
import java.util.TimerTask;
public class QuickWindow extends Thread {
private int number;
public QuickWindow(int num){
this.number=num;
}
public void setNumber(int number) {
this.number = number;
}
public void run(){
Timer t=new Timer();
t.schedule(new TimerTask(){
public void run(){
double r = Math.random();
int a=(int) (r*10);
if(a==0) a+=1;
a%=5;
Member mb=Member.getInstance();
LinkedList lst=mb.getquickList();
int lenth=lst.size();
if(lenth!=0){
synchronized(mb.getquickList().getFirst()){
int m=mb.getquickList().getFirst();
mb.getquickList().removeFirst();
System.out.println("请"+m+"号Quick用户到"+number+"号窗口"+",预计耗时"+a+"秒!!!!!!!");
try {
Thread.sleep(a*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(number+"号窗口办理结束");
}
}
else {
synchronized(mb.getsimpList().getFirst()){
LinkedList ls=mb.getsimpList();
int len=ls.size();
if(len>1){
int m=mb.getsimpList().getFirst();
mb.getsimpList().removeFirst();
System.out.println("请"+m+"号用户到"+number+"号窗口"+",预计耗时"+a+"秒!!!!!!");
try {
Thread.sleep(a*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(number+"号窗口办理结束!!!!!!");
}
else System.out.println("暂时没有普通用户排队");
}
}
}
}, 5000,2000);
}
}
package com.back;
import java.util.LinkedList;
import java.util.Timer;
import java.util.TimerTask;
public class VipWindow extends Thread {
private int number;
public VipWindow(int num){
this.number=num;
}
public void setNumber(int number) {
this.number = number;
}
public void run(){
Timer t=new Timer();
t.schedule(new TimerTask(){
public void run(){
double r = Math.random();
int a=(int) (r*10);
if(a==0) a+=1;
Member mb=Member.getInstance();
LinkedList lst=mb.getVipList();
int lenth=lst.size();
if(lenth!=0){
synchronized(mb.getVipList().getFirst()){
int m=mb.getVipList().getFirst();
mb.getVipList().removeFirst();
System.out.println("请"+m+"号Vip用户到"+number+"号窗口"+",预计耗时"+a+"秒");
try {
Thread.sleep(a*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(number+"号窗口办理结束");
}
}
else {
synchronized(mb.getsimpList().getFirst()){
LinkedList ls=mb.getsimpList();
int len=ls.size();
if(len>1){
int m=mb.getsimpList().getFirst();
mb.getsimpList().removeFirst();
System.out.println("请"+m+"号用户到"+number+"号窗口"+",预计耗时"+a+"秒.....");
try {
Thread.sleep(a*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(number+"号窗口办理结束......");
}
else System.out.println("暂时没有普通用户排队");
}
}
}
}, 5000,3000);
}
}
package com.back;
/*
* 测试类,通过多线程,分别调用各窗口的类来实现多个窗口同时工作
*/
public class BankMain {
public static void main(String[] args){
Member mb=Member.getInstance();
mb.start();
SimpWindow sw1=new SimpWindow(1);
sw1.start();
SimpWindow sw2=new SimpWindow(2);
sw2.start();
SimpWindow sw3=new SimpWindow(3);
sw3.start();
SimpWindow sw4=new SimpWindow(4);
sw4.start();
VipWindow vw=new VipWindow(5);
vw.start();
QuickWindow qw=new QuickWindow(6);
qw.start();
}
}
写完以后才发现,三个窗口实现的功能都差不多,貌似可以提取出来,这样貌似可以节省代码
但仔细一想,好像那么做的话会让代码更混乱,所以还是保留原样吧
-------------------------------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima