基于java洗浴中心管理系统_Java小白也能听懂的线程池的内部原理:老王的洗浴中心...

4b16bcf29e36c1217726b930750c3d40.png

餐厅的约会

餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!”

大龄程序员老王

老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里的一些积蓄,回老家转行创业。他选择了洗浴行业,开一家洗浴中心,是的,一家正规的洗浴中心。之前在北京的时候,喜欢去的澡堂叫“清华池”,他想了想,就给自己的洗浴中心取名为“线程池”。

线程池洗浴中心

线程池开业以后,老王发现有顾客想做足疗,于是就招聘了1个足疗技师,多增加了一项业务增加了收入。随着做足疗的顾客增多,为了赚更多钱又招聘了4个足疗技师。

过了一段时间,洗浴中心的生意越来越好,做足疗的顾客也越来越多。但是,老王发现自己店里的足疗技师已经有5个足疗技师,再招聘就太多了,支付不起再多工资了。足疗技师忙不过来怎么办?老王是个聪明人,马上想到办法:让顾客排队,有哪个足疗技师做完了,空闲出来了,就在队伍里再叫一个顾客继续做。

忙碌的周末

一到周末,来洗浴中心的顾客比平时多了几倍,想足疗的顾客排队时间太长,顾客们已经不耐烦了。老王马上做出反应,又紧急从其他洗浴中心招聘了5个足疗技师,为队伍里顾客做足疗,大大减少排队的顾客。

不过,有时生意太火爆了,紧急招聘的技师也用上了,顾客排队时间也是很长,再来新的顾客,老王只能满脸赔笑地和顾客说:“您下次再来吧,下次给您找个好技师。”,把顾客拒之门外。

过了周末以后,店里不能养闲人啊,老王就把紧急招聘的技师都辞退了。

老王的经营之道

老王的生意越做越红火,很快就要开分店、融资上市、走上人生巅峰。既然这么成功,就让我们来复盘一下他的经营之道吧。

30f76926f1c432e6cad195df66d0fcc1.png

如果你了解了老王的经营之道,线程池就不难理解了,把顾客替换成任务,把足疗技师替换成线程,线程池洗浴中心就是线程池了,线程池的内部原理就是这样的:

6e301bb67c4798c6326e023f80a36143.png

梦醒

铃铃铃,闹铃把我吵醒,原来是一场梦啊,我哪有什么女朋友?今天上午有一个面试,赶紧起床洗漱完毕,就出发了。在路上回想那个奇怪的梦,要不再复习一下线程池的内部原理吧!

先看一下ThreadPoolExecutor类的execute方法:

public void execute(Runnable command) {

if (command == null)

throw new NullPointerException();

//获取clt,clt记录着线程池状态和运行线程数。

int c = ctl.get();

//运行线程数小于核心线程数时,创建线程放入线程池中,并且运行当前任务。

if (workerCountOf(c) < corePoolSize) {

if (addWorker(command, true))

return;

//创建线程失败,重新获取clt。

c = ctl.get();

}

//线程池是运行状态并且运行线程大于核心线程数时,把任务放入队列中。

if (isRunning(c) && workQueue.offer(command)) {

int recheck = ctl.get();

//重新检查线程池不是运行状态时,

//把任务移除队列,并通过拒绝策略对该任务进行处理。

if (! isRunning(recheck) && remove(command))

reject(command);

//当前运行线程数为0时,创建线程加入线程池中。

else if (workerCountOf(recheck) == 0)

addWorker(null, false);

}

//运行线程大于核心线程数时并且队列已满时,

//创建线程放入线程池中,并且运行当前任务。

else if (!addWorker(command, false))

//运行线程大于最大线程数时,失败则拒绝该任务

reject(command);

}

在execute方法中,多次调用的addWorker方法,再看一下这个方法:

private boolean addWorker(Runnable firstTask, boolean core) {

retry:

for (;;) {

//获取clt,clt记录着线程池状态和运行线程数。

int c = ctl.get();

//获取线程池的运行状态。

int rs = runStateOf(c);

//线程池处于关闭状态,或者当前任务为null

//或者队列不为空,则直接返回失败。

if (rs >= SHUTDOWN &&

! (rs == SHUTDOWN &&

firstTask == null &&

! workQueue.isEmpty()))

return false;

for (;;) {

//获取线程池中的线程数

int wc = workerCountOf(c);

//线程数超过CAPACITY,则返回false;

//这里的core是addWorker方法的第二个参数,

//如果为true则根据核心线程数进行比较,

//如果为false则根据最大线程数进行比较。

if (wc >= CAPACITY ||

wc >= (core ? corePoolSize : maximumPoolSize))

return false;

//尝试增加线程数,如果成功,则跳出第一个for循环

if (compareAndIncrementWorkerCount(c))

break retry;

//如果增加线程数失败,则重新获取ctl

c = ctl.get();

//如果当前的运行状态不等于rs,说明状态已被改变,

//返回第一个for循环继续执行

if (runStateOf(c) != rs)

continue retry;

}

}

boolean workerStarted = false;

boolean workerAdded = false;

Worker w = null;

try {

//根据当前任务来创建Worker对象

w = new Worker(firstTask);

final Thread t = w.thread;

if (t != null) {

final ReentrantLock mainLock = this.mainLock;

mainLock.lock();

try {

//获得锁以后,重新检查线程池状态

int rs = runStateOf(ctl.get());

if (rs < SHUTDOWN ||

(rs == SHUTDOWN && firstTask == null)) {

if (t.isAlive())

throw new IllegalThreadStateException();

//把刚刚创建的线程加入到线程池中

workers.add(w);

int s = workers.size();

//记录线程池中出现过的最大线程数量

if (s > largestPoolSize)

largestPoolSize = s;

workerAdded = true;

}

} finally {

mainLock.unlock();

}

if (workerAdded) {

//启动线程,开始运行任务

t.start();

workerStarted = true;

}

}

} finally {

if (! workerStarted)

addWorkerFailed(w);

}

return workerStarted;

}

面试

一个中年男子坐在我面前,对我说:“您好,我是今天的面试官。”我微笑地回应:“您好。”面试官面无表情地问我:“线程池一定用过吧,能说说线程池的内部原理嘛?”我差点笑出声来,自信满满地说……

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
中顶洗浴管理系统针对这些场所实际需求。可以灵活管理手牌和包间,并对包间及服务实现自动计时、计费,对技师排班和灵活的提成设置,管理方式灵活、实用。系统界面简洁优美,操作直观简单,无需专门培训即可正常使用。适用于洗浴中心、高档会所、澡堂、桑拿、保健按摩、足浴、娱乐等以手牌管理为主的信息化管理场所。 中顶洗浴管理系统功能模块: 前台营业,数据服务,系统设置,POS销售,技师管理,会员管理,预订管理,库存管理,员工管理,钟房管理 硬件支持 IC卡,磁卡,描扫枪,小票和票据打印机,来电显示,客显。 配套应用 钟房管理、连锁应用、点单宝、平板电脑、触摸屏、酒店餐饮娱乐综合ERP 中顶洗浴管理系统产品优势 1.开单可自动加单:为来宾开单时系统统可自动根据此手牌类型预设的开单自动加单的商品进行自动增加消费。 2. 消费时支持类似套票、时价商品、称重商品、计价商品、别名、条码、自定义商品等具有多种特性的商品,支持多种点单状态(全部单个即起,叫起等),支持赠,退,商品备注。 3.强大的出品打印功能:出品分单,总单,漏打,催打等出品单据,可按商品,按商品类别打印,并支持出品条码打印。 4.强大的账单打印功能:支持账单的自设计,根据客户的多样需求自设计出符合客户自身的账单格式。 5.支持多种付款方式:如现金、刷卡等,用户还可根据需要增加设置其它的付款方式。 6.支持部分挂账:通常是对会员或协议单位提供的一种临时记账、签单等日后再统一结算的功能。 7.支持对挂账单的批量结帐功能;同时支持对某一单位挂账总额进行部分还款的功能。 8.完善的反结帐功能:对错账、漏单账重新修正结账。 9.丰富的优惠折扣方式:可以设置任意多种折扣方案,每种折扣方案都可以设置不同的折扣比例,同时针对不同商品类型单独再设折扣或不打折;还可以针对不同会员类型的会员或操作员指定不同的折扣方案。 10.支持多菜单管理:不同的房台类型可以指定不同的菜单,不同的菜单可以有不同的售价和不同的商品,消费时不同的房台区只能看到自已对应的菜单,通过多菜单可以实现同商品不同价以及分区域消费菜单要求有区别的用户需求。 11.支持特价商品功能:灵活的的特价设置功能,可以实现每天推出不同的特价商品来吸引客人来做为提高进店率的一种经营策略。 12.商品类型的细分更明确:商品类型支持大类小类,支持商品单独的会员价功能。 13.支持POS销售:配有POS销售模块。此功能也可用做店内小超市,做为POS销售终端来使用 14.支持技师管理:支持技师状态,技师排班,技师预定管理等功能 15.支持物品寄存:此功能支持客人随身物品寄存和消费品寄存(如茶叶,酒水等) 16.房台区域化管理:可以实现不同的营业站点显示不同的区域,实现对复杂环境的简单化管理。 17支持最低消费和房台计费:支持最低消费;支持灵活多变的按时间计费房间费。 18.支持服务费的收取:服务费的收取可按人、按消费金额等多种方式算动计算收产生服务费。 19.支持计时商品:如棋牌室、提供休息的房间、计时服务等会按时长收取费用。 20.支持多种提成方式:可对值台服务生、促销员工、营销等员工等设置提成方案,充分调动员工的工作积极性,提高服务质量。 21.支持技师管理:对店内所有技师的排班、上下钟、技师预定、技师请假以及实时的技师服务状态、服务区域手牌的查询监控。 22.简单直观的预定管理,方便快速预订并快速查询客户预订情况,客人来电自动弹屏,并可快速的为客户预订指定时间可供预订的房间。 23.支持积分管理,可以支持按消费金额、按消费次数等多种积分方案。 24.库存管理支持大小单位的自动换算,方便库存管理中经常遇到的整进零售问题。 26.无论是单店,还是大型连锁企业,或者是餐饮客房洗浴等综合一体化的大型休闲娱乐中心,都提供有不同的完善的解决方案。、账务一览、押金预警、挂账单回款统计、日报月报等 27.同时支持手牌管理模式和房间管理模式 中顶洗浴管理系统截图
中顶足浴管理系统针对足浴中心和保键按摩场所实际需求。为这些场提供了一套完整的信息化解决方案。这套系统可以灵活管理手牌和包间,并对包间及服务实现自动计时、计费,对钟房的管理,对技师排班和灵活的提成设置,对多种类型会员卡的支持,管理方式灵活、实用,并支持语单报钟器。通过信息化管理大幅提高了企业的服务质量并可以掌控大量的客户资源。适用于足疗中心、高档会所、保健按摩、足浴、休闲娱乐等以手牌和房间管理为主的信息化管理场所。 中顶足浴管理系统功能模块 前台营业,数据服务,系统设置,POS销售,技师管理,会员管理,预订管理,库存管理,员工管理,钟房管理 硬件支持 IC卡,磁卡,描扫枪,小票和票据打印机,来电显示,客显。 配套应用 钟房管理、连锁应用、点单宝、平板电脑、触摸屏、酒店餐饮娱乐综合ERP 中顶足浴管理系统产品优势 1.开单可自动加单:为来宾开单时系统统可自动根据此手牌类型预设的开单自动加单的商品进行自动增加消费。 2. 消费时支持类似套票、时价商品、称重商品、计价商品、别名、条码、自定义商品等具有多种特性的商品,支持多种点单状态(全部单个即起,叫起等),支持赠,退,商品备注。 3.强大的出品打印功能:出品分单,总单,漏打,催打等出品单据,可按商品,按商品类别打印,并支持出品条码打印。 4.强大的账单打印功能:支持账单的自设计,根据客户的多样需求自设计出符合客户自身的账单格式。 5.支持多种付款方式:如现金、刷卡等,用户还可根据需要增加设置其它的付款方式。 6.支持部分挂账:通常是对会员或协议单位提供的一种临时记账、签单等日后再统一结算的功能。 7.支持对挂账单的批量结帐功能;同时支持对某一单位挂账总额进行部分还款的功能。 8.完善的反结帐功能:对错账、漏单账重新修正结账。 9.丰富的优惠折扣方式:可以设置任意多种折扣方案,每种折扣方案都可以设置不同的折扣比例,同时针对不同商品类型单独再设折扣或不打折;还可以针对不同会员类型的会员或操作员指定不同的折扣方案。 10.支持多菜单管理:不同的房台类型可以指定不同的菜单,不同的菜单可以有不同的售价和不同的商品,消费时不同的房台区只能看到自已对应的菜单,通过多菜单可以实现同商品不同价以及分区域消费菜单要求有区别的用户需求。 11.支持特价商品功能:灵活的的特价设置功能,可以实现每天推出不同的特价商品来吸引客人来做为提高进店率的一种经营策略。 12.商品类型的细分更明确:商品类型支持大类小类,支持商品单独的会员价功能。 13.支持POS销售:配有POS销售模块。此功能也可用做店内小超市,做为POS销售终端来使用 14.支持技师管理:支持技师状态,技师排班,技师预定管理等功能 15.支持物品寄存:此功能支持客人随身物品寄存和消费品寄存(如茶叶,酒水等) 16.房台区域化管理:可以实现不同的营业站点显示不同的区域,实现对复杂环境的简单化管理。 17支持最低消费和房台计费:支持最低消费;支持灵活多变的按时间计费房间费。 18.支持服务费的收取:服务费的收取可按人、按消费金额等多种方式算动计算收产生服务费。 19.支持计时商品:如棋牌室、提供休息的房间、计时服务等会按时长收取费用。 20.支持多种提成方式:可对值台服务生、促销员工、营销等员工等设置提成方案,充分调动员工的工作积极性,提高服务质量。 21.支持技师管理:对店内所有技师的排班、上下钟、技师预定、技师请假以及实时的技师服务状态、服务区域手牌的查询监控。 22.简单直观的预定管理,方便快速预订并快速查询客户预订情况,客人来电自动弹屏,并可快速的为客户预订指定时间可供预订的房间。 23.支持积分管理,可以支持按消费金额、按消费次数等多种积分方案。 24.库存管理支持大小单位的自动换算,方便库存管理中经常遇到的整进零售问题。 26.无论是单店,还是大型连锁企业,或者是餐饮客房足浴等综合一体化的大型休闲娱乐中心,都提供有不同的完善的解决方案。、账务一览、押金预警、挂账单回款统计、日报月报等 27.同时支持手牌管理模式和房间管理模式 中顶足浴管理系统截图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值