黑马程序员--第十篇--银行业务调度系统

我觉得在这里我学习到了一下内容:
1:当两个方法同时修改某一数据时,为了避免数据错误,应该在这两个方法前加synchronized,避免线程的并发。
public synchronized Integer generateNewManage(){
		queueNumber.add(lastNumber);
		return lastNumber++;
	}
	
	public synchronized Integer fetchServiceNumber(){
		if(queueNumber.size() >0)
			return queueNumber.remove(0);
		return null;
	}
同时在网上查了一下synchronized资料
A、synchronized关键字的作用域有二种: 
1)是某个对象实例内,synchronized aMethod(){}可以防止多个线程同时访问这个对象的synchronized方法(如果一个对象有多个synchronized方法,只要一个线程访问了其中的一个synchronized方法,其它线程不能同时访问这个对象中任何一个synchronized方法)。这时,不同的对象实例的synchronized方法是不相干扰的。也就是说,其它线程照样可以同时访问相同类的另一个对象实例中的synchronized方法; 
2)是某个类的范围,synchronized static aStaticMethod{}防止多个线程同时访问这个类中的synchronized static 方法。它可以对类的所有对象实例起作用。 
B、除了方法前用synchronized关键字,synchronized关键字还可以用于方法中的某个区块中,表示只对这个区块的资源实行互斥访问。用法是: synchronized(this){/*区块*/},它的作用域是当前对象; 
C、synchronized关键字是不能继承的,也就是说,基类的方法synchronized f(){} 在继承类中并不自动是synchronized f(){},而是变成了f(){}。继承类需要你显式的指定它的某个方法为synchronized方法; 


2:可以使用线程池控制线程,重要的就是这句话Executors.newSingleThreadScheduledExecutor().execute(new Runnable(){      实现run方法      };
Executors.newSingleThreadScheduledExecutor().execute(new Runnable(){

			@Override
			public void run() {
				while(true){
					if(type == CustomerType.COMMON){
						commonService();
					}
					else if(type == CustomerType.EXPRESS){
						expressService();
					}else if(type == CustomerType.VIP){
						vipService();
					}
				}
				
			}

						
		});


3:把经常用的数据写在一个constant类中,里面都是些常量,其它类使用时直接调用。
package com.isoftstone.interview.bank;

public class Constants {
	public static final int  MAX_SERVICE_TIME = 1000;
	public static final int  MIN_SERVICE_TIME = 10000;
	public static final int COMMON_CUSTOMER_INTERVAL_TIME = 1;
}


4:统一业务逻辑上面的写在各个类中,然后写一Main方法作为启动器。
public class Test {
	public static void main(String[] args) {
		
		//数据的验证没有做
		
		ATM atm = new ATM();
		atm.start();
	}
}


5:把不可new的对象写在枚举中,这样省去了很多麻烦,比如季节只有春夏秋冬,十字路口只有红绿黄灯等等。
public enum CustomerType {
	COMMON,EXPRESS,VIP;
	public String toString(){
		if(this == COMMON)
			return "一般";
		else if(this == EXPRESS)
			return "快速";
		else if(this == VIP)
			return "VIP客户";
		return null;
	}
}
在这里经常要重写toString()方法,这个方法容易写错。
6:如果一个快内的代码过多,最好把该代码块写在一个方法内,这样容易修改,也使代码看着整洁。
if(type == CustomerType.COMMON){
						commonService();
					}
private void commonService() {
		String windowName = "第"+windowId+"号"+type+"窗口";
		Integer number = NumberMachine.getInstance().getCommonManager().fetchServiceNumber();
		System.out.println(windowName+"正在获取任务");
		if(number != null){
			long beginTime = System.currentTimeMillis();
			int maxRand = Constants.MAX_SERVICE_TIME-Constants.MIN_SERVICE_TIME;
			long serveTime = new Random().nextInt(maxRand)+1+Constants.MIN_SERVICE_TIME;
			try {
				Thread.sleep(serveTime);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			long costTime = System.currentTimeMillis()-beginTime;
			System.out.println(windowName+"为第"+number+"个"+"普通客户完成服务,耗时"+costTime/1000+"秒");
		}else{
			System.out.println("没有领取到任务,先休息1秒");
			try{
				Thread.sleep(1000);
			}catch(InterruptedException e){
				e.printStackTrace();
			}
		}
	}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值