黑马项目学习

来源:互联网 发布:有关网店数据分析 编辑:程序博客网 时间: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();  } }}

 

 

原创粉丝点击