java多线程案例
来源:互联网 发布:网络信息收集软件 编辑:程序博客网 时间:2024/06/06 00:11
什么时候使用多线程:当一个程序 执行很长一段时间,但是程序执行的时候,操作者不想等待这段时间,而是想干些别的事情。此时需要使用多线程。
生成红包案例:
1:
2:由于红包数量较多,需要占用一段时间。所以要启动线程。
3:点击确认,直接执行线程中的代码。此时可以其他操作,而不影响。
代码如下;
<!-- 生成红包 --> <form action="/newRedPacket/savePacket.html" method="post" onsubmit="return checkRecketForm()"> <div class="pop createPacketDiv" id="createPacketDivDiv"> <div class="popbg"></div> <div class="layel" style="z-index: 999; width: 800px; margin-left: -400px;"> <h3 class="addtitle"><span id="mbtitle2">生成红包</span><i class="closeicon"></i></h3> <div class="row"> <span>红包类型:</span> <input type="hidden" id="redType2" name="redType"/> <input type="hidden" name="redNewType" id="redNewType"/><!-- 红包类型的id --> <span class="selectinput plate" style="width: 100px; margin-left: 20px;"> <span class="selectvalue" id="statusSel2"> <c:if test="${empty status}">全部</c:if> <c:if test="${status==1}">普通红包</c:if> <c:if test="${status==2}">VIP红包</c:if> </span> <i class="arrow arrowright"></i> <ul class="option statusul"> <li data-id="0" onclick="setstatus2('','全部')">全部</li> <li data-id="1" onclick="setstatus2(1,'普通红包')">普通红包</li> <li data-id="2" onclick="setstatus2(2,'VIP红包')">VIP红包</li> </ul> </span> 名称<select style="WIDTH: 100px" id="title11" name="title" class="selectinput plate" onchange="title111()"><option>请选择</option></select> 满<select style="WIDTH: 100px" id="subMoney11" name="subMoney" class="selectinput plate" onchange="subMoney111()"><option>请选择</option></select>减 <input type="text" name="money" id="money11" class="input-com" disabled="true" style="width: 100px;">元 <input type="hidden" name="money22" id="money22"> </div> <div class="row" id="glCode2" style="display: none;"> <span class="personattr">关联码:</span> <select name="glId" id="glCode3" class="selectinput plate" style="margin-left: 0px;"> <option value="9999999">全部</option> <c:forEach items="${glCodeList}" var="gl" varStatus="st"> <c:if test="${gl.id == glId}"> <option value="${gl.id }" selected="selected">${gl.glCode }</option> </c:if> <c:if test="${gl.id != glId}"> <option value="${gl.id }">${gl.glCode }</option> </c:if> </c:forEach> </select> </div> <div class="row"> <span class="personattr">生成数量:</span> <input type="text" name="counts" id="counts11" class="input-com">个 </div> <div class="row" id="kouLingDiv"> <span class="personattr">口令:</span> <input type="text" name="kouLing" id="kouLing" class="kouLing"> </div> <div class="row"> <span class="personattr">有效期:</span> <input type="radio" name="useType" value="1" onclick="timeStart()" checked="checked">时间阶段 <input type="radio" name="useType" value="2" onclick="timeEnd()">固定天数 </div> <div class="row" id="timeDiv1" style="display: none;"> <span class="personattr">时间阶段</span> <input type="text" onclick="WdatePicker({dateFmt:"yyyy-MM-dd"})" class="input input-medium" name="useStartTime" id="useStartTime" placeholder="开始时间"> - <input type="text" onclick="WdatePicker({dateFmt:"yyyy-MM-dd"})" class="input input-medium" name="useEndTime" id="useEndTime" placeholder="结束时间"> </div> <div class="row" id="timeDiv2" style="display: none;"> <span class="personattr">固定天数</span> <input type="radio" name="dayCount" id="dayCount11" value="30">30天 <input type="radio" name="dayCount" value="10">10天 <input type="radio" name="dayCount" value="7">7天 </div> <div class="row"> <input type="submit" class="confirm" value="确定" style="margin-left: 0px; margin-top: 30px;"> </div> </div> </div> </form>
后台代码:
/** * 保存生成的红包 * @param suRedNewPacket * @param model * @return */ @RequestMapping("/savePacket.html") public String savePacket( @RequestParam(value = "redNewType", required = false) final Long redNewType, @RequestParam(value = "glId", required = false) final Long glId, @RequestParam(value = "counts", required = false) final Integer counts, @RequestParam(value = "kouLing", required = false) final String kouLing, @RequestParam(value = "useType", required = false) final Byte useType, @RequestParam(value = "redType", required = false) final Byte redType, @RequestParam(value = "money22", required = false) final Float money, @RequestParam(value = "useStartTime", required = false) final String startTime1, @RequestParam(value = "useEndTime", required = false) final String endTime1, @RequestParam(value = "dayCount", required = false) final String dayCount, Model model) { Thread t = new Thread(new Runnable(){//创建线程执行以下方法 public void run(){//线程的run方法 Date date = new Date(); SuRedNewPacket suRedNewPacket = new SuRedNewPacket(); SuRedGlCode code = new SuRedGlCode(); if(counts != null && counts != 0){ for(int i = 0;i<counts;i++){//导入红包个数 suRedNewPacket.setRedNewType(redNewType); suRedNewPacket.setCounts(counts); suRedNewPacket.setKouLing(kouLing); suRedNewPacket.setUseType(useType); suRedNewPacket.setMoney(money); Date startTime = null; Date endTime = null; if(StringUtils.isNotBlank(startTime1)){ String startTimeStr = startTime1+" 00:00:00"; String endTimeStr = ""; if(StringUtils.isBlank(endTime1)){ endTimeStr = DateUtil.format(new Date(),"yyyy-MM-dd")+" 23:59:59"; }else{ endTimeStr = endTime1+" 23:59:59"; } startTime = DateUtil.parse(startTimeStr, "yyyy-MM-dd HH:mm:ss"); endTime = DateUtil.parse(endTimeStr, "yyyy-MM-dd HH:mm:ss"); suRedNewPacket.setUseStartTime(startTime); suRedNewPacket.setUseEndTime(endTime); }else{ suRedNewPacket.setUseStartTime(null); suRedNewPacket.setUseStartTime(null); } if(StringUtils.isNoneBlank(dayCount)){ suRedNewPacket.setDayCount(Integer.parseInt(dayCount)); } //序列号 String sequenceNumber = null; sequenceNumber = getCard();//生成12位序列号 for (;;){ sequenceNumber = checkSequenceNumber(sequenceNumber); if (StringUtils.isNotBlank(sequenceNumber)) { break; } } suRedNewPacket.setSequenceNumber(sequenceNumber); //兑换码 String dhm = ""; if(redType == 1){//普通红包6位数字加字母 dhm = puDhm(); suRedNewPacket.setGlId(null); }else if(redType == 2){//vip红包8位数字 dhm = returnBarCode(); suRedNewPacket.setGlId(glId); }else{ suRedNewPacket.setGlId(null); } suRedNewPacket.setDhm(dhm); suRedNewPacket.setCreateDateTime(date); suRedNewPacket.setUpdateTime(date); suRedNewPacket.setStatus((byte)1); suRedNewPacket.setInvalid((byte)0); redNewPacketService.insertSelective(suRedNewPacket); } code.setId(glId); code.setRedUse((byte)1); redGlCodeService.updateByPrimaryKeySelective(code); } } }); t.start(); //调用此线程 //返回前台页面,当flag=1的时候。页面显示操作成功。 return "redirect:/newRedPacket/packetList.html?flag="+1; }
阅读全文
1 0
- java多线程交互案例
- java多线程案例
- java多线程经典案例
- java 多线程 总结 案例
- java多线程案例
- java多线程简单案例入门
- java多线程的一个案例
- 【Java多线程】多线程案例:使用多线程向用户推送短信
- Java多线程之读写锁经典案例
- Java多线程生成文件性能分析案例
- Java多线程之线程分类【案例分析】
- JAVA多线程的一个简单案例
- Java多线程经典案例-生产者消费者
- Java 多线程Timer 与 TimerTask 小案例
- Java多线程:实现一个死锁案例
- Java.SE01.多线程_案例01
- Java.SE01.多线程_案例02
- Java.SE01.多线程_案例03
- @SuppressWarnings("serial")的作用
- 全排列问题
- 初来乍到,标记一下
- Linux 调节屏幕亮度
- 图表(APAndroidChart)
- java多线程案例
- eclipse、Maven中文乱码
- 在Unity中获取、修改安卓设备系统亮度与Activity亮度
- 虹膜识别源代码下载,分别基于MATLAB、C++、OpenCV
- Python创始人Guido的建议
- leetcode_ Add to List 121. Best Time to Buy and Sell Stock
- 1011. A+B和C (15) Python 2 编译
- Java飞机大战0_2
- 防止表单重复提交