黑马项目学习
来源:互联网 发布:有关网店数据分析 编辑:程序博客网 时间:2024/06/13 17:32
交通灯总结:
交通灯设计思想:4个路口,一个路口有3种走法,也就是说一共12个方向。其中有4个方向的灯常绿。剩下的两两对应,也就是枚举中定义的样子。
public class Road {
List<String> vechicles = new ArrayList<String>();// 这个属性数组,就是假设为路上所有的车的集合
private String name;
public Road(String name) {
this.name = name;
ExecutorService pool = Executors.newSingleThreadExecutor();//线程组中会给我分配一个没有使用的线程。
pool.execute(new Runnable() {
public void run() { for (int i = 0; i < 1000; i++) {
try { Thread.sleep((new Random().nextInt(10) + 1) * 10);
} catch (InterruptedException e) { e.printStackTrace(); }
vechicles.add(Road.this.name + "_" + i); } }});
ScheduledExecutorService ses = Executors.newScheduledThreadPool(1);//定时器。
/*这个方法四个参数,第一个是要执行的线程,第二是过多少秒以后执行时间,第三个是多少秒以后重复执行,第四个时间单位*/
ses.scheduleAtFixedRate(new Runnable() { public void run() { if (vechicles.size() > 0) {
if (Lamp.valueOf(Road.this.name).isLigthed()) {
System.out.println(vechicles.remove(0)
+ " is treversing 道路上离开一辆车");
} } } }, 1, 1, TimeUnit.SECONDS); }}
package com.isoftstone.interview.traffic;
public enum Lamp {
S2N("N2S", "S2W", false), S2W("N2E", "E2W", false), E2W("W2E", "E2S", false), E2S("W2N", "S2N", false),
N2S(null, null, false), N2E(null, null, false), W2E(null, null, false), W2N(null, null, false),
S2E(null, null, true), E2N(null, null, true), N2W(null, null, true), W2S(null, null, true);
private String oppostie;// 对应的灯
private String next;// 下一个灯
private boolean ligth;// 灯是否是亮的 亮的就是绿色 不亮就是红色
private Lamp(String oppstie, String next, boolean ligth) {//构造方法
this.oppostie = oppstie;
this.next = next;
this.ligth = ligth; }
public boolean isLigthed() {//判断等是绿的还是红的return this.ligth; }
public void ligth() {
this.ligth = true;
if (null != this.oppostie) {
Lamp.valueOf(this.oppostie).ligth();
} System.out.println(name()+" is greed ");}
public Lamp blackOut() {
this.ligth = false;
if (null != this.oppostie) {
Lamp.valueOf(this.oppostie).blackOut();}
Lamp nextLamp=null;
if (null != this.next) {
nextLamp=Lamp.valueOf(this.next);
nextLamp.ligth();
System.out.println("this greed is "+name()+" to "+ next)} return nextLamp; }}
public class LampController {
private Lamp currentLamp;
public LampController()
{this.currentLamp=Lamp.S2N;
this.currentLamp.ligth();
ScheduledExecutorService ses = Executors.newScheduledThreadPool(1);
ses.scheduleAtFixedRate(new Runnable(){public void run() { currentLamp=currentLamp.blackOut(); }},10, 10, TimeUnit.SECONDS);}}
银行系统总结
/*
* 号码排序类
*/
public class NumberManager {
private int lastNumber = 1;
private List<Integer> queueNumber = new ArrayList<Integer>();
//因为这2个方法要在不同的线程中使用,,所以用到synchronized 。
public synchronized Integer geneateNewManager() {
queueNumber.add(lastNumber);
return lastNumber++;
}
public synchronized Integer fetchServerNumber() {
Integer num = null;
if (0 < queueNumber.size()) {
num = queueNumber.remove(0); } return num;}}
//号吗管理类,,所以定义为单例模式
public class NumberMachine {
private NumberManager commonManager = new NumberManager();
private NumberManager expressManager = new NumberManager();
private NumberManager vipManager = new NumberManager();
private NumberMachine() {
}private static NumberMachine machine = new NumberMachine();
public static NumberMachine Instance() {
return machine;
}public NumberManager getCommonManager() {
return commonManager;
}public NumberManager getExpressManager() {
return expressManager;
} public NumberManager getVipManager() {
return vipManager;}}
//定义枚举
public enum ServerType {
COMMON, EXPRESS, VIP;
public String toString() {
switch (this) {
case COMMON:
return "普通用户";
case EXPRESS:
return "快速客户";
case VIP:
return "VIP客户";
} return null;
}}
public class Constantes {
public static int MAX_SERVER_TIME=10000;
public static int MIN_SERVER_TIME=1000;
public static int SERVER_TIME=1;
}
import java.util.Random;
import java.util.concurrent.Executors;
public class ServerWindow {
private ServerType type = ServerType.COMMON;//窗口的办理的类型
private int windowId = 1;//窗口的编号
public void setType(ServerType type) {
this.type = type;
}
public void setWindowId(int windowId) {
this.windowId = windowId;
}
public void start() {
Executors.newSingleThreadExecutor().execute(new Runnable() {
//线程池
public void run() {
while(true){
switch (type) {
case COMMON:
commonServer();
break;
case EXPRESS:
expressServer();
break;
case VIP:
vipServer();
break; }}} }); }
private void commonServer() {
Integer num = NumberMachine.Instance().getCommonManager().fetchServerNumber();
System.out.println("第" + windowId + "个"+type+"窗口,正在呼叫" + type);
if (null != num) {System.out.println("第" + windowId + "个窗口,正在为第" + num + "个" + type+ "服务");
long beginTime = System.currentTimeMillis();
int maxTime = Constantes.MAX_SERVER_TIME - Constantes.MIN_SERVER_TIME;
long roadTime = new Random().nextInt(maxTime) + 1 + Constantes.MIN_SERVER_TIME;
try { new Thread().sleep(roadTime);
} catch (InterruptedException e) {
e.printStackTrace(); }
long endTime = System.currentTimeMillis() - beginTime;
System.out.println("第" + windowId + "个窗口" + type + "业务办理结束,用时" + endTime / 1000 + "秒");
} else {
System.out.println("第" + windowId + "窗口没有客户,休息1秒");
try {
new Thread().sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();} }}
private void expressServer() {
System.out.println("第" + windowId + "个"+type+"窗口,正在呼叫" + type);
Integer num = NumberMachine.Instance().getExpressManager().fetchServerNumber();
if (null != num) {
System.out.println("第" + windowId + "个窗口,正在为第" + num + "个" + type + "服务");
long beginTime = System.currentTimeMillis();
try {
new Thread().sleep(Constantes.MIN_SERVER_TIME);
} catch (InterruptedException e) {
e.printStackTrace(); }
long endTime = System.currentTimeMillis() - beginTime;
System.out.println("第" + windowId + "个窗口" + type + "业务办理结束,用时"
+ endTime / 1000 + "秒");
} else {
this.commonServer(); }}
private void vipServer() {
System.out.println("第" + windowId + "个"+type+"窗口,正在呼叫" + type);
Integer num = NumberMachine.Instance().getVipManager().fetchServerNumber();
if (null != num) {
System.out.println("第" + windowId + "个窗口,正在为第" + num + "个" + type+ "服务");
long beginTime = System.currentTimeMillis();
int maxTime = Constantes.MAX_SERVER_TIME
- Constantes.MIN_SERVER_TIME;
long roadTime = new Random().nextInt(maxTime) + 1
+ Constantes.MIN_SERVER_TIME;try { new Thread().sleep(roadTime);
} catch (InterruptedException e) {
e.printStackTrace();
} long endTime = System.currentTimeMillis() - beginTime;
System.out.println("第" + windowId + "个窗口" + type + "业务办理结束,用时"
+ endTime / 1000 + "秒");
} else {
this.expressServer(); } }}
- 黑马项目学习
- 黑马程序员--JAVA交通灯项目的学习
- 黑马程序员---交通灯调度系统-项目分析-学习笔记
- 黑马程序员 :项目银行操作系统的学习和理解
- 黑马程序员项目实践
- 黑马程序员_学习日记30_winphone7开发_项目的基本档案结构
- 黑马程序员_学习日记52_622三层项目(MD5、NPOI)
- 黑马程序员_学习日记54_626三层项目(三层案例)
- 黑马程序员_学习日记56_629三层项目(邮件收发、三层总结、HTML)
- 黑马程序员_学习日记78_806图书商城项目纪要
- 黑马程序员_学习日记79_807图书商城项目纪要
- 黑马程序员_学习日记80_808图书商城项目纪要
- 黑马程序员_学习日记81_810图书商城项目纪要
- 黑马程序员_学习日记82_811图书商城项目纪要
- 黑马程序员_学习日记83_812图书商城项目小结
- 黑马程序员之项目开发学习笔记:ATM取款机系统数据库设计
- 黑马程序员之项目开发学习笔记:酒店管理系统(HotelManager)
- 黑马程序员Android学习笔记——金山卫士项目——第一天
- 黑马网络编程学习
- MYSQL1067错误看这里
- 黑马java基础加强学习
- 编译 mpfr 出错 .configure
- 一位软件工程师的6年总结
- 黑马项目学习
- java.io包解密
- csv文件简介
- Java读取Properties文件的六种方法
- Java关于中文乱码问题的解决方案与经验
- 恢复ubuntu启动项
- 顺序数字矩阵算法
- [20110222]工作随笔
- 压力测试下系统负载数据的分析工具 —— sar