很久以前写的一段代码,当时碰到这么一个需求,一个人想买二手车的人,对车有许多要求,比如要求车的颜色,车的排量,前驱还是后驱,车的已经使用年限等等,这个人填写了一系列的对要买的二手车的具体要求。然后数据库有很多待出售二手车,怎么把买车的顾客和二手车们做撮合匹配呢。由于匹配条件很多,每个匹配条件的权重也有不同,所以直接一条sql很难做到,并且用存储过程来做也有一定的问题,原因一方面计算条件复杂,而且计算完毕后返回的数据结构也比较复杂,当然可能和自己对存储过程的运用不够熟练也有关系。所以当时想了这个一个解决方案,每十分钟从数据库load一次有效的二手车信息到内存中,用户填完自己的需求表单后保存到数据库,不做及时匹配的原因在于用户一段时期内都有这个需求,不是一次性查询,然后用户使用匹配功能时,自动一对多的计算一次。ok,下面干货来了,每五分load一次没问题,但是如果用户匹配的时候系统真正做load呢,或者系统正在做匹配运算的时候,时候到了清空一下内存中的数据再load一次呢?恩,出问题了。
什么是,知道大众迈腾的人应该都熟悉。有DSG是迈腾的重要卖点之一。DSG变速器的工作过程中总是有2个档位是结合的,一个正在工作,另一个则为下一步做好 准备;
这里的代码就是模拟DSG的工作原理,每次系统中维护两份二手车数据,这两份数据是不同时间段的一份数据库数据copy。数据一在被销毁前的10分钟,数据二已经提前load了一份当前的最新数据等待被使用。
代码如下,欢迎拍砖,不拍不长进,但是杜绝人身攻击
:
public class ThreadLoadMatchableInvestCar extends Thread {
private static final int QUARTER_CYCLE = 5 * 1000 * 60;
private static int POSITION_1 = 1;
private static int POSITION_2 = 2;
private static int POSITION_3 = 3;
private static int POSITION_4 = 4;
private static int POSITION = 1;
private static ArrayList<MatchableInvestCarDTO> a = new ArrayList<MatchableInvestCarDTO>();
private static ArrayList<MatchableInvestCarDTO> b = new ArrayList<MatchableInvestCarDTO>();
private static ArrayList<MatchableInvestCarDTO> getA() {
return a;
}
private static ArrayList<MatchableInvestCarDTO> getB() {
return b;
}
private static void setA() {
InvestCar is = new InvestCar();
try {
a = is.loadMatchableInvestCarList();
} catch (Exception e) {
e.printStackTrace();
}
}
private static void setB() {
InvestCar is = new InvestCar();
try {
b = is.loadMatchableInvestCarList();
} catch (Exception e) {
e.printStackTrace();
}
}
public static ArrayList<MatchableInvestCarDTO> getInvestCarList() {
switch (POSITION) {
case 1:
return getA();//第一个四分之一周期应该取数据一
case 2:
return getA();//第二个四分之一周期应该取数据一
case 3:
return getB();//第三个四分之一周期应该取数据二
case 4:
return getB();//第四个四分之一周期应该取数据二
default:
return getA();
}
}
public void run() {
initializeInvestCarList();//第一次初始化数据一和数据二
while (true) {//不断循环更新数据
waitAMoment();//每5分钟为四分之一周期
resetPositon();//判断下一个是四分之一周期
resetInvestCarList();//判断此时是否该重新load一下数据和load那份数据
}
}
//休眠5分钟
private void waitAMoment() {
try {
sleep(QUARTER_CYCLE);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//第一次初始化两份数据
private void initializeInvestCarList() {
setA();
setB();
}
private void resetInvestCarList() {
switch (POSITION) {
case 2:
setB();//第二个四分之一周期提前吧数据二准备好了,等待第三个四分之一周期数据二的调用
break;
case 4:
setA();//第四个四分之一周期提前吧数据一准备好了,等待循环回来的第一个四分之一周期数据一的调用
break;
}
}
private void resetPositon() {
switch (POSITION) {
case 1:
POSITION = POSITION_2;
break;
case 2:
POSITION = POSITION_3;
break;
case 3:
POSITION = POSITION_4;
break;
case 4:
POSITION = POSITION_1;
break;
}
}
}
分享到:
相关推荐
双离合器DSG是一种先进的自动变速技术,它通过使用两个独立的离合器来实现更快速、更平滑的换挡过程。在大众汽车集团的DSG培训材料中,详细介绍了双离合器的工作原理、结构特点以及相关技术参数。 首先,双离合器...
DSG双离合器自动变速器是基于手动变速器发展而来的,它的工作原理是通过将变速器挡位按奇、偶数分开布置,分别与两个离合器连接,通过离合器的交替切换完成换挡过程,以实现动力换挡。它综合了AMT的优势和AT动力换挡...
双离合器变速箱(DSG)是一种先进的自动变速技术,它融合了传统自动变速箱(AT)和手动变速箱(MT)的优点。DSG能够提供快速换挡、顺畅驾驶体验以及较高的燃油经济性。它主要由两套离合器和两个独立的输入轴组成,...
- **换挡过程**:当需要进行换挡时,控制系统会预先将下一个挡位准备好,并通过切换离合器实现平顺的换挡过程。 ##### 3.2 动力传递 - **连续动力输出**:DSG变速器能够实现几乎无缝的动力传递,这得益于双离合器的...
双离合器自动变速器(DSG)是一种先进的变速技术,源自手动变速器但具备自动换挡功能。DSG的工作原理是将变速器的挡位分成奇数和偶数两组,每组挡位分别与两个离合器——离合器K1和离合器K2——相连。在换挡过程中,...
使用MATLAB/SIMULINK创建汽车离合器模型,进行汽车离合器仿真。
离合器在汽车传动系统中扮演着至关重要的角色,它使得汽车在运行过程中可以实现平稳换挡,保证动力的连续传递。自汽车诞生以来,离合器技术经历了漫长的研发历程,从早期的锥形离合器到现代的盘式离合器,其功能和...
在MATLAB Simulink环境中构建离合器模型是一项技术性强、应用广泛的模拟任务,可以帮助工程师理解和优化车辆动力系统的性能。以下是对离合器模型及其在MATLAB Simulink中的实现进行的详细解释。 首先,Simulink是...
当需要换挡或停车时,驾驶员踩下离合器踏板,使膜片弹簧放松,从而中断动力传递,实现平顺的换挡过程。 3. **膜片弹簧设计**:膜片弹簧是离合器的核心部件,其设计直接影响离合器的性能。它既要提供足够的压力使从...
湿式离合器在煤矿机械传动系统中扮演着至关重要的角色,特别是在启动和换挡过程中。基于AMESim的湿式离合器建模与仿真分析是针对这一关键组件进行深入研究的重要工具。AMESim(Advanced Multi-Mechanical Simulation...
湿式双离合器自动变速器是现代汽车传动系统中的一种先进技术,它结合了手动变速器的高效能和自动变速器的便捷性。在“Clutch.rar”压缩包中,我们重点关注的是“双离合器”、“离合”以及“离合器仿真”这些关键概念...
### DSG双离合自动变速器新技术研究 #### 1. 绪论 - **自动变速器概述**:自动变速器作为汽车传动系统的关键组成部分,不仅简化了驾驶操作,还提高了驾驶的安全性和舒适性。随着社会经济的发展以及汽车普及率的...
安全离合器是一种重要的机械部件,它在许多机械设备中起到保护作用,防止过载或异常...3D设计技术的引入,不仅提高了离合器的设计精度,也加速了产品开发过程,为制造出更高性能、更安全的离合器提供了强大的工具支持。
湿式离合器的接合过程直接影响离合器的使用寿命及其工作性能。基于流体力学理论以及粗糙表面的弹性接触理论,建立了湿式离合器接合过程中油膜厚度和传递转矩的数学模型,利用Runge-Kutta数值积分法对数学模型进行耦合...
超越离合器是一种特殊的机械部件,常用于传动系统中,以实现快速切换动力传递或分离。在本主题中,我们关注的是"超越离合器总装图CAD",这是一个计算机辅助设计(CAD)文件,通常用于工程设计和制造过程中。CAD技术...
当驾驶员踩下离合器踏板时,通过主缸将液体压力传递至从动缸,进而推动活塞,使离合器片脱离飞轮,实现动力的切断。反之,释放踏板时,弹簧力使离合器片重新与飞轮接触,恢复动力传输。 ### F3离合器踏板行程的重要...
操纵系统的设计也是离合器功能实现的重要环节。离合器操纵系统有机械式和液压式两种常见类型。机械式操纵系统结构简单,但操作力度大;而液压式操纵系统则可以减小操作力,提高驾驶舒适性。经过对比分析,作者选择了...
离合器是汽车传动系统中的重要部件,它在汽车运行过程中起着至关重要的作用,能够实现发动机与传动系统的暂时分离和可靠连接。Matlab作为一款强大的数学计算和仿真软件,可以用于建立离合器的数学模型,进行动态分析...